题目给定的列表是:[2, 2, 4, 2, 3, 6, 2]&b
法一:
根据主要元素的定义,对列表进行排序操作之后,主要元素必然会出现在列表长度一半之后的一个位置上。w
所以,我们只需要判断列表中是否有超过一半的元素与中间元素相同即可(如果有,中间元素为主要元素;否则,不存在主要元素)
list1 = [2,2,4,2,3,6,2]
list1.sort() #将list1排序
length = len(list1) #列表list1的长度,
half = list1[length // 2] #list1排序后的中间元素
count = 0
for each in list1:
if each == half:
count += 1
if count > length / 2:
print("存在主要元素,是:",half)
else:
print("不存在主要元素!")
法二:
摩尔投票法(Boyer–Moore majority vote)。
摩尔投票法有时候也被称为“多数投票法”,该算法解决的问题是如何在任意多的候选人中(选票无序),找到获得票数最多的那个。
摩尔投票法分为两个阶段:
对抗阶段:分属两个候选人的票数进行两两对抗抵消
计数阶段:计算对抗结果中最后留下的候选人票数是否有效
list1 = [2,2,4,2,3,6,2]
#对抗阶段
major = list1[0]
count = 0
for each in list1:
if count == 0:
major = each
if each == major:
count += 1
else:
count -= 1
#统计阶段
if list1.count(major) > len(list1) / 2:
print("主要元素是:",major)
else:
print("不存在主要元素!")