当前位置: 首页 > news >正文

【Hot 100 刷题计划】 LeetCode 136. 只出现一次的数字 | C++ 哈希表异或基础解法

LeetCode 136. 只出现一次的数字

📌 题目描述

题目级别:简单

给你一个非空整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

  • 示例 1:
    输入:nums = [2,2,1]
    输出:1

  • 示例 2:
    输入:nums = [4,1,2,1,2]
    输出:4


💡 解法一:哈希表计数法

面对“统计元素出现次数”的问题,人类的第一直觉通常是使用哈希表(Hash Map)或者字典。
我们只需要遍历一次数组,把每个数字作为 Key,出现的次数作为 Value 存起来。最后再遍历一次哈希表,找到那个 Value 为 1 的 Key,就是我们要找的落单数字。

⚠️ 细节提醒:
在 C++ 中,std::map底层是红黑树,查找和插入的时间复杂度是O(log⁡N)O(\log N)O(logN);而std::unordered_map底层是哈希表,时间复杂度是真正的O(1)O(1)O(1)。为了严格满足题目的线性时间要求,我们应当使用unordered_map


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

classSolution{public:intsingleNumber(vector<int>&nums){// 使用 unordered_map 保证 O(1) 的插入和查找时间unordered_map<int,int>mp;// 第一次遍历:统计每个数字出现的频率for(inti=0;i<nums.size();i++){mp[nums[i]]++;}// 第二次遍历:在哈希表中寻找频率为 1 的数字for(autott:mp){if(tt.second==1)returntt.first;}return-1;// 理论上不会走到这里}};

💡 解法二:异或运算 (XOR) 的降维打击

题目给出了极其严苛的条件:时间O(N)O(N)O(N)且空间O(1)O(1)O(1)。这意味着我们不能借助任何数组、哈希表等外部数据结构。
这道题是计算机科学中利用**“位运算”的绝对经典。我们需要用到异或运算 (^)**。

异或运算有三个极其优美的数学性质:

  1. 任何数和 0 做异或运算,结果仍然是原来的数a⊕0=aa \oplus 0 = aa0=a
  2. 任何数和其自身做异或运算,结果是 0a⊕a=0a \oplus a = 0aa=0
  3. 异或运算满足交换律和结合律a⊕b⊕a=(a⊕a)⊕b=0⊕b=ba \oplus b \oplus a = (a \oplus a) \oplus b = 0 \oplus b = baba=(aa)b=0b=b

破局点:
题目中明确指出“除了某个元素只出现一次以外,其余每个元素均出现两次”。
只要我们将数组中的所有元素全部进行异或运算,根据交换律和结合律,那些成对出现的数字就会自动排在一起互相抵消成0。最终剩下的,就是那个孤零零的、只出现了一次的数字!


💻 C++ 代码实现 (极简异或法)

classSolution{public:intsingleNumber(vector<int>&nums){// 初始值为 0,因为 0 异或任何数等于任何数本身intres=0;// 遍历数组,将所有数字进行异或累加for(autoe:nums){res^=e;}// 成对的数字全变成 0 抵消了,最后留下来的 res 就是只出现一次的数字returnres;}};
http://www.jsqmd.com/news/631024/

相关文章:

  • 【技术解析】BERT:双向Transformer预训练如何革新语言理解
  • 如何处理SQL存储过程存储过程循环陷阱_优化逻辑结构
  • [RK3588]调试串口波特率优化实战:从1.5M到115200的完整指南
  • 2026最权威的降重复率网站实测分析
  • 【Hot 100 刷题计划】 LeetCode 169. 多数元素 | C++ 哈希表基础解法
  • 免费开源游戏串流终极方案:Sunshine自托管服务器完整指南
  • 告别重复劳动!用Layout2allegro批量转换PCB封装库的保姆级教程
  • 实测Stable Diffusion v1.5 Archive:单卡A10 24G显存稳定运行,生成速度超快
  • 5分钟掌握LOL身份伪装:LeaguePrank终极定制指南
  • 别再折腾原生告警了!用Alertmanager+Grafana打造更强大的飞书通知(保姆级配置)
  • 从电路到布局:深入剖析耳机串扰(Crosstalk)的成因与优化
  • TMM框架自证闭环逻辑:从公理奠基到全域递归的科学元规则
  • 一款基于 .NET 开源、跨平台应用程序自动升级组件悦
  • QuestaSim 2020.1配置Xilinx仿真库全攻略(附常见错误解决方案)
  • 2026年4月香氛品牌推荐,香薰/减压香薰/豪车香氛/油性香氛精油/瑜伽香薰/挂式香薰,香氛ODM供应厂家口碑推荐 - 品牌推荐师
  • 告别“玄学”调试:深入理解ARM Semihosting的DCC模式与性能陷阱
  • Jetson AGX Orin 新手避坑:解决‘找不到nvidia-jetpack包’的完整修复指南
  • G3810,TS3380,G1800,G2810,G4810,MG3680,IX6780,MP288,TS8380打印机废墨垫清零软件,错误代码5B00,P07,E08,1700,5b04,亲测有效。
  • YOLO-Master 与 YOLO 开始白
  • FastAPI项目半夜报警吵醒你?聊聊告警这事儿怎么搞!囤
  • Carsim/Trucksim预瞄点设置与Simulink联合仿真的变量导出实战
  • 树莓派进阶实践:基于PCF8591与热敏电阻的智能温控系统
  • STM32实战指南——SIM900A通过AT指令实现多语言短信发送
  • UniApp跨平台跳转外部链接的实战指南
  • 佳能最新清零软件ServiceTool_v6.200 ,TS3380,G1800,G2810,G3810,G4810,MG3680,IX6700,代码5B00,P07,E08,1700,5b04,有效
  • 从仿真到避坑:用Matlab Filter Design工具箱设计IIR滤波器,搞定LFM信号中的单频干扰
  • GoCodingInMyWay止
  • 终极指南:5个简单步骤免费解锁Cursor Pro完整AI编程体验
  • 【大模型落地攻坚指南】:3步实现90%参数量压缩,蒸馏后精度损失<1.2%的工业级实践
  • 2026年企业精益安全管理系统选型指南:10款主流精益安全管理软件深度盘点