寻找数组的中心索引
题目
class Solution {public int pivotIndex(int[] nums) {for (int i = 0; i< nums.length; i++){int left = 0; //每次进行重置int right = 0;for (int j = i+1; j<nums.length; j++) {right += nums[j];}for (int j = i-1; j>=0; j--){left += nums[j];}if (left == right) {return i; //返回索引;如果有多个符合值,直接返回第一个,不需要把所有符合值都找出来 } }return -1; //不用加if,如果有中心下标,已经返回i}
}
class Solution {public int pivotIndex(int[] nums) {int totalnum = 0;for (int num : nums) {totalnum += num;}for (int i = 0; i< nums.length; i++){int left = 0;int right = 0;for (int j = i+1; j<nums.length; j++) {right += nums[j];}left = totalnum - right - nums[i];if (left == right) {return i;} }return -1;}
}
class Solution {public int pivotIndex(int[] nums) {int totalnum = 0;for (int num : nums) {totalnum += num;}int left = 0;int right = 0;for (int i = 0; i< nums.length; i++){left = totalnum - right - nums[i];if (left == right) {return i;} right += nums[i];}return -1;}
}
class Solution {public int pivotIndex(int[] nums) {int totalnum = 0;for (int num : nums) {totalnum += num;}int right = 0;for (int i = 0; i< nums.length; i++){if (2*right + nums[i] == totalnum) { //left == rightreturn i;} right += nums[i];}return -1;}
}
总结:
效率优化:先计算总和,再动态更新两侧和
明确返回:数组下标指的是索引
代码冗余:循环结束,代表没有找到数组下标,直接返回-1,不需要再加条件
判断条件:left == right, 2*left + nums[i] = totalnum
提示条件:根据提示条件可得,数组范围【10^-7, 10^7】, int类型数据范围【(-2)^31, 2^31 - 1】,所以使用int类型数组即可。