本文主要是介绍数组:左右两边数组的和相等,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 题目
- 解题思路
- 代码
- 总结
题目
求数组中心数,如果数字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;
}
总结
本题也是求连续子数组数字的和。解决此题需要理解题意,理清思路后,就容易解答了。
这篇关于数组:左右两边数组的和相等的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!