题目来源:链接
题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
实现代码:
def majorityElement(self, nums: List[int]) -> int:
from collections import Counter
votes,count = 0,0
for num in nums:
if votes == 0:
x = num
votes += 1 if num == x else -1
for num in nums:
if num == x:
count += 1
return x if count > len(nums)//2 else 0
解题思路:
可以用计数,也可以用摩尔排序法
选举票数,当票数减到0的时候就需要换过一个数字来进行选举了
一开始,是0票,这时候需要选一个数出来,继续循环,下一个如果还是这个数,票数+1,否则-1
虽然票数最多的数字出现了,但是却不一定超过一半,所以还要再遍历一遍
用了两次遍历,但是空间没有增加,只增加了几个变量的空间
如果用Counter的话,需要额外建立一个字典,当元素很多的时候造成负担