1. 题目
https://leetcode.cn/problems/find-pivot-index/
给你一个整数数组 nums ,请计算数组的 中心下标 。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。
2. 我的解法
思路:
比较暴力,从左到右,循环算出和进行对比
代码:
class Solution {
public int pivotIndex(int[] nums) {
int index=0;
for(int i=0;i<nums.length;i++){
int sum1=0;
int sum2=0;
for(int j=0;j<=i;j++){
sum1+=nums[j];
}
for(int k=i;k<nums.length;k++){
sum2+=nums[k];
}
if(sum1==sum2){
index=i;
break;
}else{
index=-1;
}
}
return index;
}
}
3. 更佳解法
https://leetcode.cn/problems/find-pivot-index/solution/xun-zhao-shu-zu-de-zhong-xin-suo-yin-by-gzjle/
思路:
数组[k1,k2,k3,…kj,…kn],j是中间下标
数组和total
kj左侧数字和:sum
kj右侧数组和:total-sum-kj
左侧数字和=右侧数字和
sum=total-sum-kj
int total = Arrays.stream(nums).sum();
int sum=0;
for(int i=0;i<nums.length;i++){
if(sum==total-sum-nums[i]){
return i;
}
sum+=nums[i];
}
return -1;
4. 备注
- int total = Arrays.stream(nums).sum(); 数组和
- 试着考虑等式关系,减少循环