📅  最后修改于: 2023-12-03 15:28:48.504000             🧑  作者: Mango
现有一个长度为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
本题可以使用哈希表或递归分治的方法解决。在编写代码时需要注意边界条件的处理,以及如何比较左右两个部分的出现次数。