前言
博耶-摩尔多数投票算法(英语:Boyer–Moore majority vote algorithm),中文常作多数投票算法、摩尔投票算法等,是一种用来寻找一组元素中占多数元素的常数空间级时间复杂度算法。这一算法由罗伯特·S·博耶和J·斯特罗瑟·摩尔在1981年发表,也是处理数据流的一种典型算法。
2013 年计算机学科专业基础综合(408)真题
应用场景
寻找数组中占一半以上的元素
例如 [1,2,3,3,3] 中的 3
原理及方法
多数的数和其他数极限一换一
两次遍历:
第①次找到最后活下来的数
第②次排除活下来的数是最后一个捡漏的
复杂度
时间复杂度 | 空间复杂度 |
---|---|
O(n) | O(1) |
准确来说:
时间复杂度:O(2n) = O(n)
👇直接看代码
python版:
def majorityElement(nums)
pre, cnt = -1, 0
for i in nums:
if cnt == 0: pre,cnt = i,1
elif pre == i: cnt += 1
else:cnt -= 1
return pre if cnt and nums.count(pre) > len(nums) // 2 else -1
简单哈希表解法:
def majorityElement(nums)
hashmap = defaultdict(int)
for x in nums:
hashmap[x] += 1
if hashmap[x] > len(nums) // 2:return x
return -1