数组中出现次数超过一半的数字

问题描述

给定一个大小为n的数组,找出其中出现次数超过⌊n/2⌋的元素(即多数元素)。假设数组非空,且多数元素一定存在。

关键结论:多数元素出现的次数比其他所有元素出现次数之和还要多

常见解法分析

1. 哈希表统计法

核心思想:使用哈希表统计每个数字出现的次数,当某个数字的计数超过n/2时立即返回。

时间复杂度分析
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)
java实现
public int majorityElement(int[] nums) {
    Map counts = new HashMap<>();
    for (int num : nums) {
        counts.put(num, counts.getOrDefault(num, 0) + 1);
        if (counts.get(num) > nums.length / 2) {
            return num;
        }
    }
    return -1; // 根据题意不会执行到这里
}
python实现
def majorityElement(nums):
    counts = {}
    for num in nums:
        counts[num] = counts.get(num, 0) + 1
        if counts[num] > len(nums) // 2:
            r

你可能感兴趣的:(python,算法,数据结构)