题目描述
给你一个下标从 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判断的这里,总是使if和elif对不齐出现错误。所以大家一定要注意细节哦!
并且,一不小心就将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:]):
- 在循环内部,这行代码检查从列表的开始到当前索引(包括当前索引)的子列表的和是否等于从当前索引到列表末尾的子列表的和。如果相等,这意味着当前索引处的数字是中间索引。
需要注意的是,此代码在处理具有偶数个元素的列表时可能会出现问题,因为它只返回满足条件的第一个索引。
菜鸟终须努力,累死累活,欸~
放宽心态,加油哦~