题目
求数组中心数,如果数字Nums[i]前面的所有数组和等于其后面所有的数组和,那么nums[i]就是中心数。请返回从左起数组中第一个中心数。
输入:[1,7,3,6,2,9]
输出:3
解题思路
index | num | s |
---|---|---|
0 | 1 | 1 |
1 | 7 | 8 |
2 | 3 | 11 |
3 | 6 | 17 |
4 | 2 | 19 |
5 | 9 | 28 |
sum为数组下标i的累加数组数字的和,
total为数组所有元素累加之和。
我们可以发现规律:
2*sum + num[i] = total;
依据上面发现的规律,我们可以写出如下代码:
代码
public int pivotIndex(int[] nums) {
int total = 0;
for(int num: nums) {
total += num;
}
int sum = 0;
for(int i = 0; i< nums.length; i++) {
if(2 * sum + nums[i] == total) {
return i;
}
sum += nums[i];
}
return -1;
}
总结
本题也是求连续子数组数字的和。解决此题需要理解题意,理清思路后,就容易解答了。