找到数组的中间位置
题目:找到数组的中间位置
给你一个下标从0开始的整数数组nums,请你找到最左边的中间位置middleIndex(也就是所有可能中间位置下标最小的一个)。
中间位置middleIndex是满足nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1]的数组下标。
如果middleIndex == 0,左边部分的和定义为0。类似的,如果middleIndex == nums.length - 1,右边部分的和定义为0。
请你返回满足上述条件最左边的middleIndex,如果不存在这样的中间位置,请你返回-1。
思路很简单:初始化左边和left、统计数组总数total为右边初始值,从0到nums.length - 1依次增加left和减小total,直到找到左右相等的i或遍历到数组结束。代码如下:
var findMiddleIndex = function(nums) {
let i = 0, total = nums.reduce((r, n) => {
r = r + n
return r
}, 0),left = 0
while(i < nums.length) {
if (left == total - nums[i]) {
return i
}
total -= nums[i]
left += nums[i]
i++
}
return -1
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
因为是判断左右相等,我们也可以直接遍历数组判断是否存在left = (total - nums[i])/ 2即可,原理是差不多的这里就不展示具体代码了。
上次更新: 2025/09/05, 8:09:00