当前位置:网站首页>【力扣】寻找数组的中心下标
【力扣】寻找数组的中心下标
2022-08-11 05:31:00 【爱吃西瓜爱吃肉】
题目:给你一个整数数组 nums ,请计算数组的 中心下标 。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。
题目分析:大概意思是说,数组中找到一个数,数左边总和等于右边总和。如果有两个就返回最左边的索引。
两种方法:
那么首先想到的就是暴力解法,两个for循环,外层循环计算左边的总和,内层计算每次右边的总和,然后比较左右总和是否相等,相等直接返回(因为如果有多个,需要最左边的),计算完比较一次记得将右总和清零。
class Solution {
public int pivotIndex(int[] nums) {
int leftSum=0;
int rightSum=0;
int n=-1;
for(int i=0;i<nums.length;i++){
leftSum+=nums[i];
for(int j=i;j<nums.length;j++){
rightSum+=nums[j];
}
if(leftSum==rightSum){
n = i;
return n;
}
rightSum=0;
}
return n;
}
}
方法二:
跟方法一不同,不计算左右两边的总和。只需要计算一边的总和,因为如果符合要求,左右两边相等。所以数左边总和*2+该数=全部总和,如果作总和包含该数,公式就是:
左总和*2-该数=全部总和
class Solution {
public int pivotIndex(int[] nums) {
int sum=0;
int leftSum=0;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
}
for(int j=0;j<nums.length;j++){
leftSum+=nums[j];
if(leftSum*2-nums[j]==sum){
return j;
}
}
return -1;
}
}
边栏推荐
猜你喜欢
随机推荐
Lua 快速入门(二)——函数(Function)
Lua 快速入门(六)——基础OOP
连接数据库时出现WARN: Establishing SSL connection without server‘s identity verification is not recommended.
JS this关键字
C语言-7月19日-指针的学习
【LeetCode-455】方法饼干
C语言预处理
C-8月1日-递归与动态内存管理
Unity3D中所有特殊的文件夹
2022DASCTF X SU 三月春季挑战赛 checkin ROPgadget进阶使用
C语言-7月22日- NULL和nullptr的深入了解以及VScode对nullptr语句报错问题的解决
脚本自动选择Hierarchy或Project下的对象
脚本批量打包渠道包研究
BaseFragment的抽取
一文看懂注解与反射
IIC and SPI
【LeetCode-34】在排序数组中查找元素的第一个和最后一个位置
欧拉角、四元数与旋转
Lua 协同程序(coroutine)
微信小程序_开发工具的安装