public int pivotIndex(int[] nums) {
//题目中nums[]的长度 1 <= nums.length <= 104
//res为返回值 如果运行结束res仍然 = Integer.MAX_VALUE 说明没找到 中心下标
int res = Integer.MAX_VALUE;
//定义前缀和数组
int[] array = new int[nums.length + 1];
array[0] = 0;
//计算得到nums对应的前缀和数组
for (int i = 1; i <= nums.length; i++) {
array[i] = array[i - 1] + nums[i - 1];
}
//找中心下标 循环从1开始 找到结果时 结果再-1
/**
* 该循环的操作
* left为中心下标左边的数组元素和
* right为中心下标右边的数组元素和
* 例子
* [1,2,3,2,1]
* 对应前缀和数组
* [0,1,3,6,8,9]
* left = array[i-1]
* 当i = 3时
* left = array[3-1] = 3
* right = array[6] - array[3] = 9 - 6 = 3
* 由于前缀和数组第1个元素 对应 原始数组前0个元素的和 所以找到的i 需要i-1 结果就是中心下标
* i-1 = 2
*/
for (int i = 1; i <= nums.length; i++) {
int left = array[i - 1];
int right = 0;
right = array[nums.length] - array[i];
if (left == right) {
res = i - 1;
break;
}
}
if (res == Integer.MAX_VALUE) {
return -1;
} else {
return res;
}
}
剑指 Offer II 012. 左右两边子数组的和相等
最新推荐文章于 2024-06-19 00:03:59 发布