【Hot 100 刷题计划】 LeetCode 169. 多数元素 | C++ 哈希表基础解法

LeetCode 169. 多数元素

📌 题目描述

题目级别:简单

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

  • 示例 1:

    输入:nums = [3,2,3]

    输出:3

  • 示例 2:

    输入:nums = [2,2,1,1,1,2,2]

    输出:2


💡 破题思路:哈希表频率统计

这是最符合直觉的解法。我们要找出现次数最多的元素,直接用一个"小本本"把每个数字出现的次数记下来就好了。

遍历数组,将每个元素存入哈希表中并记录其出现频率。最后再遍历一次哈希表,找出那个出现次数大于 n / 2 的数字即可。

⚠️ 面试避坑点:

在 C++ 中,务必使用 unordered_map 而不是 mapmap 的底层是红黑树,插入和查找都是 O(log N) 的时间复杂度;而 unordered_map 的底层是哈希表,能够做到真正的 O(1),保证整体算法跑进线性时间。


💻 C++ 代码实现 (哈希表法)

cpp 复制代码
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        // 使用 unordered_map 保证 O(1) 的存取时间
        unordered_map<int, int> mp;
        int n = nums.size();

        // 第一次遍历:统计所有元素的频率
        for (int i = 0; i < n; i ++ )
        {
            mp[nums[i]] ++ ;
        }

        // 第二次遍历:找到频率大于一半的那个多数元素
        for (auto tt : mp)
        {
            if (tt.second > n / 2) return tt.first;
        }

        return -1; // 因为题目保证一定有多数元素,理论上不会走到这里
    }
};
相关推荐
汉克老师19 分钟前
GESP 四级明日冲刺:最后一晚只抓两个大方向
c++·gesp·小学生·学c++编程
一木 之林41 分钟前
第 3 节 在 AI 行业中,C/C++ 编程中的动态库和静态库
c语言·c++·后端
库玛西42 分钟前
深度解构高并发利器:纯事件驱动 Reactor 模式的设计哲学与工程实践
服务器·开发语言·c++·笔记·tcp/ip
linx2951 小时前
单元五 · 对称认知·下:编译与链接
linux·c语言·开发语言·c++·嵌入式硬件
alphaTao1 小时前
LeetCode 每日一题 2026/9/7-2026/9/13
算法·leetcode
C++ 老炮儿的技术栈1 小时前
西门子 S7 常用存储区(I/Q/M/T/C/DB/PI/PQ)
linux·开发语言·c++·windows·qt·io
linx2952 小时前
单元七 · 零基础路线图-第 1–3 周·变量、类型与字符串
c语言·开发语言·数据结构·c++·算法
Benny_Tang2 小时前
P7514 [省选联考 2021 A/B 卷] 卡牌游戏 题解
c++·算法
程序猿编码3 小时前
LLM 技术迁移音频领域:基于 GGML 搭建 Roformer,端侧音乐人声分离实现详解
c++·llm·音视频·transformer·模型推理·ggml