修复Python数组主元素索引查找代码:判断最大元素是否为其他元素两倍
我来帮你搞定这段代码的问题!先拆解下原代码里的几个关键错误:
原代码问题分析
- 逻辑搞反了:你现在写的是只要碰到一个元素满足
max_num >= 2*num就立刻返回索引,但我们要的是所有其他元素都得满足这个条件才行——只要有一个元素不达标,就应该返回-1。 - 索引调用错误:循环里的
num.index(max_num)完全不对,num是数组里的单个元素,不是数组本身,之前已经存好的max_i才是我们要的最大值索引。 - 没排除最大值自身:循环时会把最大值和自己比较(比如
max_num >= 2*max_num,只有当最大值是0时才成立),这会干扰判断结果。
修复后的代码
def dominantIndex(self, nums): # 单个元素直接返回索引0,不用多此一举调用index if len(nums) == 1: return 0 max_num = max(nums) max_i = nums.index(max_num) # 遍历所有元素,跳过最大值本身,逐个检查是否符合要求 for num in nums: if num == max_num: continue # 只要有一个元素不满足,直接返回-1 if max_num < 2 * num: return -1 # 所有元素都达标,返回最大值的索引 return max_i
测试用例验证
我们来跑你给出的三个输入,看看结果:
- 输入
[1,0]:最大值是1(索引0),检查0:1 >= 2*0 成立,返回 0 - 输入
[0,3,4,8]:最大值是8(索引3),分别检查0、3、4,都满足8 >= 2*元素的条件,返回 3 - 输入
[0,3,5,2]:最大值是5(索引2),检查3时发现5 < 2*3=6,直接返回 -1
内容的提问来源于stack exchange,提问作者Jason Becker
相关产品推荐
相关产品推荐

