鱼C论坛

 找回密码
 立即注册
查看: 2279|回复: 3

[已解决]求助

[复制链接]
发表于 2022-7-29 20:58:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
摩根投票,只不过要选两个变量。我的问题在于for循环里后两个我不理解。前两个if循环的意思是遍历数组里的数,如果是就让count加下去。但后边两个if啥意思呢。而且还有count-1那里是不是丢了else啊。
nums = [1, 1, 2, 1, 3, 2, 3, 2]
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
    count1 -= 1
    count2 -= 1
# 统计阶段
if nums.count(major1) > len(nums) / 3:
    print(major1)
if nums.count(major2) > len(nums) / 3:
    print(major2)
最佳答案
2022-7-31 07:07:02
zhongning123 发表于 2022-7-30 14:41
不是的老哥,我问的是这一段
if count1 == 0:
        major1 = each

不好意思

for 循环中的 4 个 if 就是所谓的“对抗阶段吗”
我们就不断的选出有可能成为绝对众数的 “候选人”
先从 num[0] 开始
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 来代替
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-29 22:02:37 | 显示全部楼层
就是数一数 major1 的数量 是不是 多于 3 分之一
再数一数 major2 的数量 是不是 多于 3 分之一
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-31 07:07:02 | 显示全部楼层    本楼为最佳答案   
zhongning123 发表于 2022-7-30 14:41
不是的老哥,我问的是这一段
if count1 == 0:
        major1 = each

不好意思

for 循环中的 4 个 if 就是所谓的“对抗阶段吗”
我们就不断的选出有可能成为绝对众数的 “候选人”
先从 num[0] 开始
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 来代替
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 08:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表