|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
nums = [2,2,4,2,3,6,2,7,7,7,7,7]
major1 = major2 = nums[0]
count1 = count2 = 0
for each in nums:
if major1 == each:
count1 += 1
continue
if major2 == each:
count2 += 1
continue
if count1 == 0:
major1 = each
count1 = 1
continue
if count2 == 0:
major2 = each
count2 = 1
continue
else:
count1 -= 1
count2 -= 1
if nums.count(major1) > len(nums) / 3:
print(major1)
if nums.count(major2) > len(nums) / 3:
print(major2)
在我这段代码里面 很显然最后会输入7 但是我理解不了 按照我认为的代码逻辑应该是从上往下处理 那么对于前三个元素 后面major不是就被赋值为4了吗,然后count2变成了1 然后到了2 然后count1 += 1了 然后又重新循环到了3 都不满足count1 == 2了 count2 == 0了 到了下一个6 count2又被赋值为1,然后到下一个2 count1 == 3了,到了下一个7 都不满足 然后各减1 count2 == 0了 以此类推 最后满足7的major2 只能是4次 然而count2 最后只能==4 不是吗? 然后最后会等于1 / 3 然而代码输出还是7 我用眼睛看也是7出现五次 但是我理解为4次 我不知道要怎样去理解了
首先,major1 和 major2 不仅仅是计数,它们还在追踪潜在的出现次数大于 n/3 的元素。当遍历到最后一个元素时,major1 和 major2 可能已经找到了出现次数大于 n/3 的元素,但它们的 count1 和 count2 并不一定反映这两个元素的实际出现次数。
在遍历结束后,我们需要使用 nums.count(major1) 和 nums.count(major2) 来获取 major1 和 major2 的实际出现次数。这是因为在遍历过程中,我们只是尽量保持 count1 和 count2 不为 0,而不是精确地统计 major1 和 major2 的出现次数。
所以,在遍历结束后,我们需要再次计算 major1 和 major2 的出现次数,并与 n/3 进行比较。在这个例子中,major1 为 2,major2 为 7,然后我们分别计算它们的实际出现次数:nums.count(2) 为 5,nums.count(7) 为 5。因为 5 > 12/3,所以最后打印输出 2 和 7。
|
|