LCR 012. 寻找数组的中心下标

一.题目:

LCR 012. 寻找数组的中心下标 - 力扣(LeetCode)

二.我的原始解法-暴力双重循环-提交成功:

class Solution:

    def pivotIndex(self, nums: List[int]) -> int:

        # 暴力解法

        # 双重循环 先计算全数组和,右边数组再依次遍历减去当前值 左边数组依次加上上一个值

        left_sum, right_sum = 0, 0

        n = len(nums)

        for i in range(1,n):

            right_sum += nums[i]

        if left_sum == right_sum:

            return 0

        for j in range(1, n):

            right_sum -= nums[j]

            left_sum += nums[j - 1]

            if left_sum == right_sum:

                return j

        return -1

三.其他人的正确及好的解法,力扣解法参考:

答案中提到的比较多的解法是前缀和,前缀和讲的比较清楚的:https://segmentfault.com/a/1190000045108831?sort=newest

四.对于别人解法的消化及总结:

前缀和的解法其实是从答案找解法,这道题对于时间复杂度没有要求,也没有使用通用查找算法,如我自己的暴力求解法也可以提交成功

前缀和的原理就是右一个隐藏条件是任意坐标的特点是左边和+中心坐标+右边和=数组和,而中心坐标的左边和=右边和,综合这两个条件可以

推导出2倍的左边和+中心坐标=数组和,所以先求数组和,然后找到符合这个条件的坐标返回即可,求数组和使用的是内置函数,只需要遍历一遍

数组找到符合条件的坐标,所以整体时间复杂度是O(n)(O(2n)也是O(n))。

相比我的暴力解法,还是前缀和比较简单

暴力解法提交:

前缀和解法提交:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值