📜  用于检查排序数组中的多数元素的 Python3 程序(1)

📅  最后修改于: 2023-12-03 15:27:11.722000             🧑  作者: Mango

用于检查排序数组中的多数元素的 Python3 程序

本程序可以用于检查排序数组中的多数元素,即出现次数超过一半的元素。使用了摩尔投票算法。

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)$,因为只使用了常数个额外变量。