###229. Majority Element II
题目: https://leetcode.com/problems/majority-element-ii/
难度: Medium
思路:
majority element是两两比较扔掉不同的元素,然后最后会留下一个。
这里变成三三比较来扔东西, find all elements that appear more than ⌊ n/3 ⌋ times,所以最多可以有两个majority element ii.
最后再加一个比较来确认这些函数是majority element
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
cnt1 = 0
cnt2 = 0
maj1 = 0
maj2 = 0
for num in nums:
if maj1 == num:
cnt1 += 1
elif maj2 == num:
cnt2 += 1
elif cnt1 == 0:
maj1 = num
cnt1 += 1
elif cnt2 == 0:
maj2 = num
cnt2 += 1
else:
cnt1 -= 1
cnt2 -= 1
cnt1 = 0
cnt2 = 0
n = len(nums)
res = []
for num in nums:
if maj1 == num:
cnt1 += 1
elif maj2 == num:
cnt2 += 1
if cnt1 > n/3:
res.append(maj1)
if cnt2 > n/3:
res.append(maj2)
return res