Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋
times. The algorithm should run in linear time and in O(1) space.
Hint:
- How many majority elements could it possibly have?
- Do you have a better hint? Suggest it!
class Solution(object):
def majorityElement(self, nums):
a = '' #nums[0]
b = '' #nums[1]
ta = 0
tb = 0
l = len(nums)
if l == 2:
return list(set(nums))
times = l/3
for i in nums[:]:
if i == a:
ta += 1
elif i == b:
tb += 1
elif ta <= 0:
a = i
ta = 1
elif tb <= 0:
b = i
tb = 1
else:
ta -= 1
tb -= 1
res = []
if nums.count(a) > times:
res += a,
if a != b and nums.count(b) > times:
res += b,
return res