力扣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/9 6:46:40 阅读更多 →
深度测评8个AI论文软件,专科生毕业论文轻松搞定!

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

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

2026/7/8 14:28:46 阅读更多 →

最新新闻

Java-AES-Crypto安全审计:如何确保加密实现的安全性

Java-AES-Crypto安全审计:如何确保加密实现的安全性

Java-AES-Crypto安全审计&#xff1a;如何确保加密实现的安全性 【免费下载链接】java-aes-crypto A simple Android class for encrypting & decrypting strings, aiming to avoid the classic mistakes that most such classes suffer from. 项目地址: https://gitcode…

2026/7/10 18:10:16 阅读更多 →
Eagleye节点架构解析:15个核心模块如何协同工作

Eagleye节点架构解析:15个核心模块如何协同工作

Eagleye节点架构解析&#xff1a;15个核心模块如何协同工作 【免费下载链接】eagleye Precise localization based on GNSS and IMU. 项目地址: https://gitcode.com/gh_mirrors/ea/eagleye 想要实现车辆厘米级高精度定位&#xff1f;Eagleye开源定位软件通过15个核心模…

2026/7/10 18:10:16 阅读更多 →
直流负载管理优化:G6D-ASI继电器与PIC18F4585控制方案

直流负载管理优化:G6D-ASI继电器与PIC18F4585控制方案

1. 直流负载管理的挑战与优化思路在工业控制和电力电子领域&#xff0c;直流负载管理一直是个既基础又关键的技术课题。我最近在一个自动化产线改造项目中&#xff0c;就遇到了典型的直流负载控制难题——产线上12V/24V直流电磁阀和电机群组存在明显的开关瞬态冲击&#xff0c;…

2026/7/10 18:08:15 阅读更多 →
计算机毕业设计之基于SSM的校园招聘系统

计算机毕业设计之基于SSM的校园招聘系统

本文首先实现了校园招聘系统设计与实现管理技术的发展&#xff0c;随后依照传统的软件开发流程&#xff0c;最先为系统挑选适用的言语和软件开发平台&#xff0c;依据需求分析开展控制模块制做和数据库查询构造设计&#xff0c;随后依据系统整体功能模块的设计&#xff0c;制作…

2026/7/10 18:08:15 阅读更多 →
FanControl终极指南:打造静音高效的水冷散热系统

FanControl终极指南:打造静音高效的水冷散热系统

FanControl终极指南&#xff1a;打造静音高效的水冷散热系统 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanC…

2026/7/10 18:06:15 阅读更多 →
Python手机号查询QQ号:3分钟掌握高效查询技术

Python手机号查询QQ号:3分钟掌握高效查询技术

Python手机号查询QQ号&#xff1a;3分钟掌握高效查询技术 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 手机号查询QQ号是一个基于Python的开源工具&#xff0c;能够通过手机号码快速获取关联的QQ账号信息。这个工具采用TEA加密算法…

2026/7/10 18:06:15 阅读更多 →

日新闻

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 阅读更多 →

月新闻