Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times.
Note: The algorithm should run in linear time and in O(1) space.
Example 1:
Input: [3,2,3]
Output: [3]
Example 2:
Input: [1,1,1,3,3,2,2,2]
Output: [1,2]
Save two different element, if one is not equal to either, the num of the two elments should decrease by 1. When traval finish, the check the num of the two.
class Solution(object):
def majorityElement(self, nums):
a, b = 0, 0
c1, c2 = 0, 0
for num in nums:
if num == a:
c1 += 1
elif num == b:
c2 += 1
elif c1 != 0 and c2 != 0:
c1 -= 1
c2 -= 1
elif c1 == 0:
a = num
c1 = 1
else:
b = num
c2 = 1
c1, c2 = 0, 0
for num in nums:
if num == a:
c1 += 1
elif num == b:
c2 += 1
res = []
if c1 > len(nums)//3:
res.append(a)
if c2 > len(nums)//3:
res.append(b)
return res