前端向:LeetCode 724 寻找数组的中心索引 -简单

给定一个整数类型的数组 nums,请编写一个能够返回数组 “中心索引” 的方法。

我们是这样定义数组 中心索引 的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。

如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-pivot-index
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的代码

var pivotIndex = function(nums) {
    var sum=nums[0];
    for(var i =0;i<nums.length-2;i++){
        for(var j =i ;j>0;j--){
            sum = sum + nums[j]
        }
        if(sum-nums[i+2] == 0&&i==nums.length-3){
            return i+1
        }else if(sum-nums[i+2]<=0){
            sum =0;
            continue;
        } else{
            var sum1 = 0;
            for(var t =i+1 ;t<nums.length;t++){
                sum1 = sum1 + nums[t]
            }
            if(sum==sum1){
                return i+1
            }else{
                continue;
            }
        }
    }

    return -1;
};

PS:简直是……一言难尽。每次都得计算右边的和。我的思路是拿左边的和与中心索引右边那个元素比,如果比右边那个元素小了,就不需要计算右边了直接进行下次循环,如果不是,就直接左右相加,看是否相等。
奥对了,我这垃圾代码都通不过测试……还不如直接暴力法🐶
这种就是顺序思维。其实应该反过来想,看了优秀的代码后才知道,只需要计算总和以及不断计算左边的元素和然后作对比就好。

他人代码

var pivotIndex = function(nums) {
    let sum = 0;
    nums.forEach(num => sum += num);
    let leftSum = 0;
    for(i = 0; i < nums.length; i++){
        if((sum - nums[i]) - leftSum == leftSum){
            return i;
        }else{
            leftSum += nums[i];
        }
    }
    return -1;
};

作者:lvshanke
链接:https://leetcode-cn.com/problems/find-pivot-index/solution/dan-ke-xi-lie-yong-shi-9375nei-cun-10000-by-lvshan/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

PS:或者可以总和减去索引对应值=2*左边元素和。这个题的误导在于,如果中心索引是0,默认左边没有元素的时候和为0处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值