通过万岁!!!
- 题目:给你一个数组,然后你找到一个元素,使得这个元素的左边之和和右边之和相等。这里有两个特殊情况,如果下标是0或者是最后一个,可以认为对应的左边或者右边的和是0。
- 思路:就是我们先对数组进行求和,然后从左边开始找前缀和即可。大致思路是这样的,下面说一下具体的做法。首先我们先写一下一般公式,在i位置,然后我们nums[i-1]就是前面到i-1位置的和,所以sum-num[i]-nums[i-1]表示i位置右侧元素和(不包含i位置)如果等于nums[i-1],那么这就是我们要找到i,直接返回接口,否则的话,i位置要求前缀和了,也就是nums[i]+=nums[i-1]。这是一般公式,一般公式要从i=[1, nums.length-2],也就是说,不包含第一个和最后一个,这两个需要单独判断,并且注意判断顺序,是先判断0,然后进行一般公式,然后是最后一个元素。
- 技巧:前缀和
java代码
class Solution {
public int pivotIndex(int[] nums) {
int sum = 0;
int len = nums.length;
for (int i = 0; i < len; i++) {
sum += nums[i];
}
if (sum - nums[0] == 0) {// 最左端
return 0;
}
for (int i = 1; i < nums.length - 1; i++) {
if (sum - nums[i] - nums[i - 1] == nums[i - 1]) {
return i;
} else {
nums[i] += nums[i - 1];
}
}
if (sum - nums[len - 1] == 0) {
return len - 1;
}
return -1;
}
}
- 总结:题目不是特别难,但是需要想到前缀和。