鱼C论坛

 找回密码
 立即注册
查看: 3826|回复: 12

[技术交流] 12 - 进阶版摩尔投票法

[复制链接]
发表于 2021-6-9 16:51:14 | 显示全部楼层 |阅读模式
购买主题 已有 13 人购买  本主题需向作者支付 5 鱼币 才能浏览

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-10 09:03:45 | 显示全部楼层
滴滴来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-23 16:09:20 | 显示全部楼层
li = eval(input('请输入列表:'))
K = [[li[0], 0],[li[1], 0]]
for i in li:
    if i == K[0][0]:
        K[0][1] += 1
    elif i == K[1][0]:
        K[1][1] += 1
    elif K[0][1] == 0:
        K[0][0] = i
        K[0][1] = 1
    elif K[1][1] == 0:
        K[1][0] = i
        K[1][1] = 1
    else:
        K[0][1] -= 1
        K[1][1] -= 1
if li.count(K[0][0]) > len(li) / 3 and li.count(K[1][0]) > len(li) / 3:
    print(f'列表中出现次数超过1/3的元素为{K[0][0]},{K[1][0]}')
elif li.count(K[0][0]) > len(li) / 3:
    print(f'列表中出现次数超过1/3的元素为{K[0][0]}')
elif li.count(K[1][0]) > len(li) / 3:
    print(f'列表中出现次数超过1/3的元素为{K[1][0]}')
else:
    print(f'列表中没有出现次数超过1/3的元素')

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-28 12:47:12 | 显示全部楼层
zhangyuesd 发表于 2021-6-23 16:09
li = eval(input('请输入列表:'))
K = [[li[0], 0],[li[1], 0]]
for i in li:

不错!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-13 20:10:50 | 显示全部楼层
用桶排序可以最简化吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-14 15:50:34 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-12 20:00:28 | 显示全部楼层
本帖最后由 与森逐鹿 于 2022-2-12 20:04 编辑

list = [2,2,4,2,3,6,2]
count = 0
major = 0

for i in list:
    if count == 0:
        major = i
        count += 1
    elif i == major:
        count += 1
    else:
        count -= 1

if count == 0 or (list.count(major)<= (len(list)/2)):
    print("没有那个数字")
else:
    print("那个数字是{}".format(major))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-5 10:36:52 | 显示全部楼层
请女神解惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-6 22:10:40 | 显示全部楼层
# ********** 摩尔投票法进阶 **********
# 题干
# 现有列表:[1, 1, 2, 1, 3, 2, 3, 2],找出占比数量最多的两个元素,而且这两个元素的数量还需要超过总数的三分之一

testlist = [1, 1, 2, 1, 3, 2, 3, 2]
# testlist = [1, 1, 1, 1, 3, 2, 3, 2, 1]
# testlist = [1, 1, 1, 2, 2, 2, 3, 3, 3]
preelement1 = 0
preelement2 = 0
count1 = 0
count2 = 0

for each in testlist:
    if count1 == 0:
        preelement1 = each
        count1 += 1
        continue
    if count2 == 0:
        if each == preelement1:
            count1 += 1
        if each != preelement1:
            preelement2 = each
            count2 += 1
        continue
    elif count1 != 0 or count2 != 0:
        if each == preelement1:
            count1 += 1
            continue
        if each == preelement2:
            count2 += 1
            continue
        if (each != preelement1) and (each != preelement2):
            count1 -= 1
            count2 -= 1

count1 = 0
count2 = 0
for each in testlist:
    if each == preelement1:
        count1 += 1
    if each == preelement2:
        count2 += 1
    else:
        pass
if (count1 > len(testlist)/3) and (count2 > len(testlist)/3):
    print('该列表存在两个主要元素,分别是:%s,%s' % (preelement1, preelement2))
elif count1 > len(testlist)/2:
    print('该列表仅存在一个主要元素为:%s' % preelement1)
elif count2 > len(testlist)/2:
    print('该列表仅存在一个主要元素为:%s' % preelement2)
else:
    print('该列表不存在主要元素!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-20 23:21:21 | 显示全部楼层
鱼C有你更精彩^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-2 22:54:32 | 显示全部楼层
沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-4 23:58:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-2 09:03:50 | 显示全部楼层
学习一下下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 21:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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