📅  最后修改于: 2023-12-03 15:13:42.703000             🧑  作者: Mango
Boyer-Moore 多数投票算法是一种用于寻找数组中出现次数最多的元素的算法。该算法已经被证明是线性时间的,具有很高的效率,并且需要不到 n 次比较就能在长度为 n 的数组中找到出现次数最多的元素。该算法于 1981 年由 Robert S. Boyer 和 J Strother Moore 发明。
Boyer-Moore 多数投票算法的时间复杂度为 O(n),具有线性时间复杂度。算法的本质在于对于数组中众数(出现次数超过数组长度一半的元素),它们和其他元素之间的相对数量关系不管如何变化,仍能保证至少有一个元素在子序列中被保留下来,从而直接推断该元素就是数组的众数。
下面是 Python 代码实现:
def majorityElement(nums: List[int]) -> int:
count = 0
candidate = None
for num in nums:
if count == 0:
candidate = num
count += 1 if num == candidate else -1
return candidate
其中,nums
表示要寻找众数的数组,返回值为数组的众数。
Boyer-Moore 多数投票算法在很多场景中都有很广泛的应用。例如,在多数元素由两个不同的元素组成的情况下,该算法能够筛选出出现次数较多的元素,或者在数据流的情况下,该算法能够实时地找出出现次数最多的元素。