python语言:leecode刷题,寻找数组索引中位数

题目描述

给你一个下标从 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 。

菜鸟思路分析

这道题目,我呢首先有一个思路,就是先求出nums的和sum,然后用循环按序检测用count来记录左边序列的和,右边序列的和用sum-num[i+1]-count来表示。

在这里我用flag代替middleIndex

先判断nums长度==1和大于1时,nums.length==1直接让flag==0,

nums.length>1时,

然后,来判断有三种情况:

(1)count==sum-num[i+1]-count   flag=i

(2)count==sum and count==0  flag=0

(3)count==sum and count!=0 flag=-1

运行后思路改进:

条件判断中的逻辑不正确。

在if条件判断中,在检查sum - count - nums[i + 1] == count时。这个条件实际上意味着当前子数组的和与下一个元素相加等于当前子数组的和。这显然是不可能的。

\(QAQ)/,果然是我会犯的错误。

重新改一下,需要应该重新考虑如何确定中位数索引。满足 nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1] 的数组下标。

菜鸟代码典型错误:
原始思路下的代码:
class Solution(object):  
    def findMiddleIndex(self, nums):  
        flag = -1  
        i = 0  
        sum = 0  # 初始化sum变量  
        count = 0  # 初始化count变量  
  
        for j in range(len(nums)):  
            sum += nums[j]  
  
        if len(nums) == 1:  
            flag = 0  # 因为此时0之前的数字是空和0,0之后的数字也是空和0  
        elif len(nums) > 1:  
            while i < len(nums) - 1:  
                count += nums[i]  
                if sum - count - nums[i + 1] == count:  
                    flag = i + 1  
                    break  
                elif count == sum and count != 0:  
                    flag = -1  
                    break  
                elif count == sum == 0:  
                    flag = 0  
                    break  
                i += 1  # 确保循环正确执行  
        return flag

在写python代码的时候,总是会将缩进搞错。(扶额苦笑(?·/|\·")?),比如在if判断的这里,总是使ifelif对不齐出现错误。所以大家一定要注意细节哦!

并且,一不小心就将nums少些s,所以一定要细心+细心++++…… 

官方解析没有Python语言

在评论区找到了一位大佬的解题代码,简直完美perfect:

class Solution(object):
    def findMiddleIndex(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        for i in range(len(nums)):
            if sum(nums[:i]) == sum(nums[i+1:]):
                return i
        return -1

class Solution(object):

    def findMiddleIndex(self, nums):

        """

        :type nums: List[int]

        :rtype: int

        """

        for i in range(len(nums)):

            if sum(nums[:i]) == sum(nums[i+1:]):

                return i

        return -1

 

解析:if sum(nums[:i]) == sum(nums[i+1:]): - 在循环内部,这行代码检查从列表的开始到当前索引(包括当前索引)的子列表的和是否等于从当前索引到列表末尾的子列表的和。如果相等,这意味着当前索引处的数字是中间索引。

需要注意的是,此代码在处理具有偶数个元素的列表时可能会出现问题,因为它只返回满足条件的第一个索引。

菜鸟终须努力,累死累活,欸~

放宽心态,加油哦~

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值