我的另一个博客地址:www.cnblogs.com/bllx/
之前的文章就不再迁移过来了,以后就从掘金上更新后续的博客了
时隔半年多,才更新今年的第一篇博客,忙碌了半年的项目终于结尾了,开启更博的模式
每日一道算法题,今天是第一道
题目: 输入: nums = [1, 7, 3, 6, 5, 6] 输出:3 解释: 索引 3 (nums[3] = 6) 的左侧数之和 (1 + 7 + 3 = 11),与右侧数之和 (5 + 6 = 11) 相等。同时, 3 也是第一个符合要求的中心索引。
概念: 1. 中心索引:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和 2. 如果数组不存在中心索引,那么我们应该返回 -1。 3. 如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
思路:
1、首先计算出整个数组的总和Sum
2、遍历整个数组,将每个值累加,累加的和leftSum
3、如果满足leftSum = Sum - currentItem - leftSum,说明此时的index值是中心索引,跳出循环,return index
4、如果leftSum = Sum,说明没有中心索引,返回-1
代码:
var list = [1, 7, 3, 6, 5, 6] //测试数组
var provitIndex = function (list){
if(list.length <= 1) return -1
let sum = list.reduce( (a,b) => a+b )
let leftSum = 0
for(let i=0;i<list.length;i++){
if(leftSum == sum - leftSum - list[i]){
return i
}
leftSum += list[i]
}
if(leftSum == sum){
return -1
}
}