力扣136.只出现一次的数字-异或和HashMap
问题描述给定一个非空整数数组除了某个元素只出现一次外其余每个元素都出现两次。找出那个只出现了一次的元素。方法一传统HashMap解法思路分析最直观的想法是统计每个数字出现的次数然后找出只出现一次的那个数字。实现代码class Solution { public int singleNumber(int[] nums) { // 创建HashMap来存储数字及其出现次数 MapInteger, Integer map new HashMap(); // 遍历数组统计每个数字出现的次数 for (int num : nums) { // 如果map中已经包含这个数字 if (map.containsKey(num)) { // 出现次数加1 map.put(num, map.get(num) 1); } else { // 第一次出现设为1 map.put(num, 1); } } // 遍历map找到出现次数为1的数字 for (Integer key : map.keySet()) { if (map.get(key) 1) { return key; } } // 理论上不会执行到这里题目保证有解 return -1; } }复杂度分析时间复杂度O(n)需要遍历数组一次遍历map一次空间复杂度O(n)最坏情况下需要存储n/21个键值对优缺点✅ 思路直观容易理解✅ 适用于更一般的情况如找出出现奇数次/偶数次的数字❌ 需要额外的存储空间❌ 代码相对冗长方法二HashMap改进版思路分析Java 8引入了一些新的API可以让我们的代码更加简洁优雅。实现代码class Solution { public int singleNumber(int[] nums) { MapInteger, Integer map new HashMap(); // 使用getOrDefault简化代码 for (int num : nums) { // 如果num存在获取当前值加1如果不存在用0加1 map.put(num, map.getOrDefault(num, 0) 1); } // 使用entrySet同时获取key和value避免多次查找 for (Map.EntryInteger, Integer entry : map.entrySet()) { if (entry.getValue() 1) { return entry.getKey(); } } return -1; } }关键技术点1. getOrDefault方法getOrDefault方法在key存在时返回对应的value不存在时返回指定的默认值这里是0。2. entrySet遍历// 使用entrySet只需一次遍历 for (Map.EntryInteger, Integer entry : map.entrySet()) { if (entry.getValue() 1) { // 直接获取value return entry.getKey(); // 直接获取key } }优缺点✅ 代码更简洁✅ 使用entrySet提升遍历效率❌ 仍然需要额外的存储空间方法三异或运算的魔法思路分析这是一个需要点数学思维的解法利用了异或运算的几个重要性质任何数和0异或等于它本身a ⊕ 0 a任何数和自身异或等于0a ⊕ a 0异或运算满足交换律和结合律a ⊕ b ⊕ a (a ⊕ a) ⊕ b 0 ⊕ b b实现代码class Solution { public int singleNumber(int[] nums) { int result 0; for (int num : nums) { result ^ num; // 对每个数字进行异或运算 } return result; } }复杂度分析时间复杂度O(n)只需遍历一次数组空间复杂度O(1)只使用常数级别的额外空间优缺点✅ 时间复杂度最低✅ 空间复杂度最优✅ 代码极其简洁❌ 需要理解异或运算的特性❌ 仅适用于特定情况其他数字都出现两次三种方法对比特性传统HashMap改进HashMap异或运算时间复杂度O(n)O(n)O(n)空间复杂度O(n)O(n)O(1)代码简洁度一般简洁极简通用性高可处理任意次数高可处理任意次数低只适用于两次思维难度低中高拓展思考如果其他数字出现三次只有一个出现一次这时候异或运算就不适用了但可以使用HashMap或位运算的扩展解法。如果有两个只出现一次的数字这需要更巧妙的位运算技巧可以通过分组异或来解决。总结这道题目看似简单却蕴含了丰富的算法思想HashMap解法体现了最直接的计数思维是解决频率统计问题的通用方法API优化展示了如何利用语言特性写出更优雅、高效的代码异或解法揭示了数学思维在算法中的强大威力在实际开发中我们通常选择HashMap解法因为它通用且易于理解和维护。但在面试或竞赛中异或解法往往更受青睐因为它展示了候选人对问题的深入理解。希望这篇文章能帮助你更好地理解不同的解题思路。记住没有最好的算法只有最适合场景的算法。思考题如果题目改为除了一个数字出现一次外其他数字都出现三次你能想到几种解法

相关新闻

【基于Tube的非线性系统模型预测控制MPC】基于鲁棒控制不变集的管式模型预测控制方案及其在利普希茨(Lipschitz)非线性系统中的应用(Matlab代码实现)

【基于Tube的非线性系统模型预测控制MPC】基于鲁棒控制不变集的管式模型预测控制方案及其在利普希茨(Lipschitz)非线性系统中的应用(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

2026/7/10 18:08:17 阅读更多 →
Spree API惊现未授权IDOR漏洞,可泄露访客地址信息

Spree API惊现未授权IDOR漏洞,可泄露访客地址信息

Spree API 存在未授权 IDOR 漏洞 - 访客地址信息泄露 (CVE-2026-22589) 漏洞详情 严重性等级: 高危 发布日期: 2026年1月8日 最后更新: 2026年1月11日 受影响的包: bundlerspree_core (RubyGems) 受影响的版本: 4.0.0, < 4.10.2 5.0.0, < 5.0.7 5.1.0, < 5.1…

2026/7/10 18:15:53 阅读更多 →
深度测评8个AI论文软件,专科生毕业论文轻松搞定!

深度测评8个AI论文软件,专科生毕业论文轻松搞定!

深度测评8个AI论文软件&#xff0c;专科生毕业论文轻松搞定&#xff01; AI 工具如何助力论文写作&#xff0c;专科生也能轻松应对 随着人工智能技术的不断发展&#xff0c;AI 工具在学术写作中的应用越来越广泛。对于专科生来说&#xff0c;撰写毕业论文是一项既重要又充满挑…

2026/7/10 18:54:17 阅读更多 →

最新新闻

纽扣电池供电优化:NBM5100A与STM32F303VE能量管理方案

纽扣电池供电优化:NBM5100A与STM32F303VE能量管理方案

1. 项目背景与核心价值在物联网设备和便携式电子产品设计中&#xff0c;纽扣电池供电方案一直面临两个关键挑战&#xff1a;瞬时大电流需求导致的电压骤降&#xff0c;以及电池容量有限带来的续航瓶颈。传统方案往往需要牺牲性能或增大电池体积&#xff0c;而NBM5100A与STM32F3…

2026/7/10 18:57:21 阅读更多 →
Seerr媒体请求管理解决方案:构建智能家庭媒体中心的终极实践指南

Seerr媒体请求管理解决方案:构建智能家庭媒体中心的终极实践指南

Seerr媒体请求管理解决方案&#xff1a;构建智能家庭媒体中心的终极实践指南 【免费下载链接】seerr Open-source media request and discovery manager for Jellyfin, Plex, and Emby. 项目地址: https://gitcode.com/GitHub_Trending/je/seerr 在流媒体内容日益丰富的…

2026/7/10 18:57:21 阅读更多 →
2026 技术实测:6 款 CA 电子签章对接 LIMS 系统接口兼容性深度对比

2026 技术实测:6 款 CA 电子签章对接 LIMS 系统接口兼容性深度对比

在检测行业的数字化建设中&#xff0c;实验室信息管理系统&#xff08;LIMS&#xff09;与CA 电子签章系统的集成是实现报告全生命周期自动化流转的核心环节。检测报告由于具有高并发、超多页码、复杂骑缝章、版式不固定等特征&#xff0c;对电子印章系统的 API 兼容性、底层渲…

2026/7/10 18:57:21 阅读更多 →
Midscene.js架构解析:视觉AI驱动的跨平台自动化测试革命

Midscene.js架构解析:视觉AI驱动的跨平台自动化测试革命

Midscene.js架构解析&#xff1a;视觉AI驱动的跨平台自动化测试革命 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 在当今快速迭代的软件开发环境中&#xff0c…

2026/7/10 18:57:21 阅读更多 →
基于PIC18与PAM8904的智能报警系统设计

基于PIC18与PAM8904的智能报警系统设计

1. 项目背景与核心需求 在工业控制、智能家居和安防系统中&#xff0c;可靠的事件通知机制是保障系统安全运行的关键环节。传统蜂鸣器报警方案存在音调单一、音量不可调、功耗高等痛点。基于PIC18LF46K22微控制器与PAM8904音频驱动器的组合&#xff0c;我们可以构建一个支持多级…

2026/7/10 18:51:19 阅读更多 →
3个认知突破:重新思考网络爬虫识别的新范式

3个认知突破:重新思考网络爬虫识别的新范式

3个认知突破&#xff1a;重新思考网络爬虫识别的新范式 【免费下载链接】crawler-user-agents Syntactic patterns of HTTP user-agents used by bots / robots / crawlers / scrapers / spiders. pull-request welcome :star: 项目地址: https://gitcode.com/gh_mirrors/cr/…

2026/7/10 18:51:19 阅读更多 →

日新闻

STM32与LTC1864高精度ADC的SPI通信实现

STM32与LTC1864高精度ADC的SPI通信实现

1. 项目背景与核心需求在工业控制和嵌入式系统开发中&#xff0c;模拟信号与数字系统的无缝集成一直是工程师面临的关键挑战。LTC1864作为一款16位高精度ADC转换器&#xff0c;配合STM32F101ZG这类主流微控制器&#xff0c;能够构建高性能的模拟信号采集系统。这种组合特别适合…

2026/7/10 0:03:07 阅读更多 →
猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件:浏览器资源嗅探与视频下载的终极解决方案

猫抓插件&#xff1a;浏览器资源嗅探与视频下载的终极解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无法下载而烦恼吗&am…

2026/7/10 0:05:09 阅读更多 →
直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

直流有刷电机驱动方案:TC78H653FTG与MKV46F256VLH16应用

1. 直流有刷电机驱动方案概述在工业自动化和消费电子领域&#xff0c;直流有刷电机因其结构简单、控制方便、成本低廉等优势&#xff0c;仍然是许多应用场景的首选驱动方案。TC78H653FTG作为东芝推出的新一代H桥驱动器&#xff0c;与MKV46F256VLH16微控制器配合使用&#xff0c…

2026/7/10 0:05:09 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻