上面是LeeCode的一道题,说说我的解题思路:
- 这个题目,我们可以理解成在数组中找到一个支点,然后两边的数刚好达成平衡
- 那么这个支点所在的坐标就是我们的中心坐标,如果没有就返回-1
- 那么支点两端我们肯定需要比较就需要两个变量来存(leftSum和rightSum)
- 很多同学可能会想的很麻烦.那比较一次我就要从新再算一次左右两边的权重,这个计算量是非常大的
- 其实只用计算一次,那就是第一次知道整个数组的权重,然后每次操作,把右边的拿到左边就可以了
代码如下
/**
* @param {number[]} nums
* @return {number}
*/
var pivotIndex = function (nums) {
let leftSum = 0 //左边的权重
let allSum = sum(nums) //整个数组的权重
let rightSum = allSum //右边的权重
//循环就是支点不断右移的实现
for (i = 0; i < nums.length; i++) {
//每次支点的变动,就重新计算左右两边的权重
leftSum = leftSum + (nums[i - 1] || 0)
rightSum = allSum - leftSum - nums[i]
//计算完权重就比较一次权重
if (leftSum == rightSum) {
return i
}
}
return -1
};
function sum(nums) {
let sum = 0
for (i = 0; i < nums.length; i++) {
sum = sum + nums[i]
}
return sum
}