📜  门|门 IT 2007 |问题 14(1)

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

门|门 IT 2007 |问题 14

问题描述

现有一个长度为n的数组,每个元素为整数,找出其中出现次数超过n/2次的那个数。

实现思路

一种简单的方法是使用哈希表统计每个数出现的次数,然后找到出现次数超过n/2的数。

另一种方法是使用递归分治。将数组分成左右两个部分,分别递归找到左半部分和右半部分出现次数超过n/2的数,然后比较这两个数的出现次数,选取出现次数更多的数作为当前数组的出现次数超过n/2的数。

代码实现
def majority_element(nums: List[int]) -> int:
    if len(nums) == 1:
        return nums[0]
    mid = len(nums) // 2
    left = majority_element(nums[:mid])
    right = majority_element(nums[mid:])
    if left == right:
        return left
    left_count = nums.count(left)
    right_count = nums.count(right)
    return left if left_count > right_count else right
测试样例

输入:[1, 2, 3, 2, 2, 2, 5, 4, 2]

输出:2

总结

本题可以使用哈希表或递归分治的方法解决。在编写代码时需要注意边界条件的处理,以及如何比较左右两个部分的出现次数。