您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # LeetCode如何求众数
## 什么是众数
众数(Mode)是统计学中的概念,指在一组数据中出现次数最多的数值。与平均数、中位数不同,众数反映的是数据的集中趋势中最常见的值。例如:
- 数据集 `[1, 2, 2, 3]` 的众数是 `2`
- 数据集 `[1, 1, 2, 2]` 的众数是 `1` 和 `2`(多众数情况)
在LeetCode中,典型的众数问题如 **169. Majority Element**(多数元素),要求找出出现次数超过 `⌊n/2⌋` 次的元素。
---
## 常见解法与代码实现
### 方法一:哈希表统计法
**核心思想**:通过哈希表记录每个元素的出现次数,最后返回出现次数最多的元素。
```python
def majorityElement(nums):
    counts = {}
    for num in nums:
        counts[num] = counts.get(num, 0) + 1
    return max(counts.keys(), key=counts.get)
复杂度分析: - 时间复杂度:O(n),遍历数组一次 - 空间复杂度:O(n),最坏情况下需要存储所有元素
核心思想:排序后,众数一定会出现在数组中间位置(仅适用于多数元素问题)。
def majorityElement(nums):
    nums.sort()
    return nums[len(nums)//2]
复杂度分析: - 时间复杂度:O(n log n),取决于排序算法 - 空间复杂度:O(1) 或 O(n),视排序实现而定
最优解:适用于出现次数超过一半的众数问题。通过抵消不同元素的方式找到候选众数。
def majorityElement(nums):
    candidate = None
    count = 0
    for num in nums:
        if count == 0:
            candidate = num
        count += (1 if num == candidate else -1)
    return candidate
复杂度分析: - 时间复杂度:O(n),单次遍历 - 空间复杂度:O(1)
要求:找出所有出现次数超过 ⌊n/3⌋ 次的元素。
解法:扩展摩尔投票法,维护两个候选数。
def majorityElement(nums):
    candidate1, candidate2 = None, None
    count1, count2 = 0, 0
    for num in nums:
        if num == candidate1:
            count1 += 1
        elif num == candidate2:
            count2 += 1
        elif count1 == 0:
            candidate1 = num
            count1 = 1
        elif count2 == 0:
            candidate2 = num
            count2 = 1
        else:
            count1 -= 1
            count2 -= 1
    # 二次验证
    result = []
    for candidate in [candidate1, candidate2]:
        if nums.count(candidate) > len(nums) // 3:
            result.append(candidate)
    return result
当数据以流的形式输入且无法存储全部数据时,可使用空间优化的哈希表或抽样统计法。
None或抛出异常)[1,2,3] 需要特殊处理1.0 和 1 是否算相同)GROUP BY + COUNT 组合)| 方法 | 适用场景 | 时间复杂度 | 空间复杂度 | 
|---|---|---|---|
| 哈希表 | 通用众数问题 | O(n) | O(n) | 
| 排序法 | 多数元素问题 | O(n log n) | O(1) | 
| 摩尔投票法 | 出现次数过半的众数问题 | O(n) | O(1) | 
推荐选择: - 面试优先选择摩尔投票法(考察算法思维) - 工程实践可考虑哈希表(代码可读性高) “`
(注:全文约1200字,可根据需要增减代码示例或详细说明部分)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。