📅  最后修改于: 2023-12-03 15:27:11.722000             🧑  作者: Mango
本程序可以用于检查排序数组中的多数元素,即出现次数超过一半的元素。使用了摩尔投票算法。
def majorityElement(nums):
"""
:type nums: List[int]
:rtype: int
"""
count = 1
m = nums[0]
for i in range(1, len(nums)):
if count == 0:
m = nums[i]
count = 1
elif nums[i] == m:
count += 1
else:
count -= 1
return m
nums
: 排序数组count
: 计数器,记录目前为止出现次数最多的元素的个数m
: 出现次数最多的元素循环遍历整个数组,记录当前出现次数最多的元素和它的出现次数。遇到和当前元素相同的则将计数器加一,否则将计数器减一。若计数器减为零则更换当前记录的元素为当前值,计数器变为一。
最终返回的就是出现次数最多的元素。
print(majorityElement([1, 2, 2, 2, 3]))
# 输出: 2
本程序的时间复杂度为 $O(n)$ ,其中 $n$ 是数组的长度,因为只需要遍历一次数组即可。
本程序的空间复杂度为 $O(1)$,因为只使用了常数个额外变量。