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

本文介绍了一种线性时间和O(1)空间复杂度的算法来找出数组中出现次数超过n/3的元素。该算法使用抵消方法进行处理,并提供了Python实现。

被折叠的 条评论
为什么被折叠?



