zhongning123 发表于 2022-7-29 20:58:39

求助

摩根投票,只不过要选两个变量。我的问题在于for循环里后两个我不理解。前两个if循环的意思是遍历数组里的数,如果是就让count加下去。但后边两个if啥意思呢。而且还有count-1那里是不是丢了else啊。
nums =
major1 = major2 = nums
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
    count1 -= 1
    count2 -= 1
# 统计阶段
if nums.count(major1) > len(nums) / 3:
    print(major1)
if nums.count(major2) > len(nums) / 3:
    print(major2)

liuzhengyuan 发表于 2022-7-29 22:02:37

就是数一数 major1 的数量 是不是 多于 3 分之一
再数一数 major2 的数量 是不是 多于 3 分之一

zhongning123 发表于 2022-7-30 14:41:05

liuzhengyuan 发表于 2022-7-29 22:02
就是数一数 major1 的数量 是不是 多于 3 分之一
再数一数 major2 的数量 是不是 多于 3 分之一

不是的老哥,我问的是这一段
if count1 == 0:
      major1 = each
      count1 = 1
      continue
    if count2 == 0:
      major2 = each
      count2 = 1
      continue
    count1 -= 1
    count2 -= 1

liuzhengyuan 发表于 2022-7-31 07:07:02

zhongning123 发表于 2022-7-30 14:41
不是的老哥,我问的是这一段
if count1 == 0:
      major1 = each


{:10_245:}不好意思

for 循环中的 4 个 if 就是所谓的“对抗阶段吗”
我们就不断的选出有可能成为绝对众数的 “候选人”
先从 num 开始
major 1 和 major 2 不断对抗
出现 major 1,count 1 加一
出现 major 2,count 2 加一
if count == 0 的意思就是说在 each 不等于都两个 major 的前提下,打败一个从没出现过的“废物”major,取代其位置
再之后就是在两个 major 都有是满位的时候,就没有所谓可以打败的“废物” major 了
开始执行 最后两行代码,意思就是一个新的元素出现时肯定降低了其他两个major的地位。但是我们没有第 3 个可以存放数据的major了,所以就相对的让两个 count 减一,让其他所有元素不断消耗其他两个major的 count。直到其中一个被打败变成 0,再有一个新的 major 来代替
页: [1]
查看完整版本: 求助