摩尔投票的扩展,易知大于1/3的肯定最多只有两个。
所以我们计算时记录两个数
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
res1,res2 = nums[0],nums[0]
cnt1,cnt2 = 0,0
for num in nums:
if num == res1: #注意这里先判断等不等再判断cnt是否为0,因为如果先判断是否为0会导致同一个数记到不同的cnt下了
cnt1 += 1 #如[2,1,1,3,1,4,5,6] 执行到第三个1之前是(2,0),(1,1),这个时候如果不按照上述判断就会出现上述情况
elif num == res2:
cnt2 += 1
elif cnt1 == 0:
res1 = num
cnt1 += 1
elif cnt2 == 0:
res2 = num
cnt2 += 1
else:
cnt1 -= 1
cnt2 -= 1
cnt1,cnt2 = 0,0
res = []
for num in nums:
if num == res1:
cnt1 += 1
elif num == res2:
cnt2 += 1
if cnt1 > len(nums)/3: res.append(res1)
if cnt2 > len(nums)/3: res.append(res2)
return res