给定一个n个整型元素的列表a,其中有一个元素出现次数超过n / 2,求这个元素。
# 常规思路:遍历每一个位置的元素
list1 = [5,3,5,2,5,6,5,5,8,5]
max_cnt = 1
max_num = list1[0]
for i in list1:
if max_cnt < list1.count(list1[i]):
max_cnt = list1.count(list1[i])
max_num = list1[0]
print(max_num)
# 法二:一个元素超过n/2,有序后必然中间元素一定是该元素
list1 = [5,3,5,2,5,6,5,5,8,5]
list1.sort()
print(list1[len(list1)//2])
# 法三:当一个元素出现此数最多时,未必超过n/2,可以使用火拼法(投票法)
list1 = [5, 3, 5, 2, 5, 6, 5, 5, 8, 5]
def solution(l):
vote = 0
elector = -1
for i in l:
if vote == 0: elector = i
vote += 1 if elector == i else -1
return elector
print(solution(list1))