题目
解题思路
前缀和
- 如果 middleIndex == 0 ,左边部分的和定义为 0
- 如果0 < middleIndex < nums.length - 1, 当nums[i - 1] == (nums[len - 1] - nums[i])时, 返回 i
- 如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0
代码
class Solution {
public int findMiddleIndex(int[] nums) {
int ans = -1, len = nums.length;
for (int i = 1; i < len; i++) nums[i] += nums[i - 1];
// 如果 middleIndex == 0 ,左边部分的和定义为 0
if (nums[len - 1] - nums[0] == 0) return 0;
for (int i = 1; i < len - 1; i++) if (nums[i - 1] == (nums[len - 1] - nums[i])) return i;
// 如果 middleIndex == nums.length - 1 ,右边部分的和定义为 0
if (nums[len - 2] == 0) return len - 1;
return ans;
}
}
题目来源:力扣(LeetCode)