尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

19 . 只出现一次的数字

19 . 只出现一次的数字
📅 发布时间:2026/6/19 9:28:35

题目介绍

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

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

提示:

  • 1 <= nums.length <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104
  • 除了某个元素只出现一次以外,其余每个元素均出现两次。
class Solution { public: int singleNumber(vector<int>& nums) { } };

全文1300字,阅读+思考 8min

原题链接:136. 只出现一次的数字 - 力扣(LeetCode)


解析

1 . 本题需求很简单,即给你一个数组(vector<int>) ,找出数组中只出现一次的数字并返回

且其余数字都出现了两次

哈希

1 . 对于要找出单身狗数字,很容易想到的思路:遍历数组一遍,统计每个数字出现的次数

2 . 只需要统计一遍,就能知道每个数字出现多少遍。

代码初步构建:

class Solution { public: int singleNumber(vector<int>& nums) { map<int,int> mp;// 数字 ,出现的次数 for(auto e:nums) { mp[e]++; } //统计完毕 } };

3 . 已经统计好每个数字出现的次数,那么再遍历一遍数组

4 . 一旦遇到次数为1(即mp[e] == 1)就立刻返回e

class Solution { public: int singleNumber(vector<int>& nums) { map<int,int> mp;// 数字 ,出现的次数 for(auto e:nums) { mp[e]++; } for(auto e:nums) { if(mp[e] == 1) return e; } return 0;//为了编译通过,需要再加一个return } };

注:

1 . 这个方法逻辑和写法没有问题

2 . 可使用了O(n)的空间开销而非常量,但时间开销符合要求O(n)

异或

此方法重点掌握——

1 . 回忆:异或。全称:按位异或——二进制位运算之一

2 . 异或的本质 : 模二乘法运算

a . 0 ^ 0 = 0 0 ^ 1 = 1 1^1 = 0

b . a ^ 0 = a a ^ a = 0;

3 . 我们正是利用”b中式子”完成需求

a . 当给出的数组都是成双成对的数字,那么可想而知:将所有数字进行异或结果为0

b , 异或运算与顺序无关,它只与参与运算的位有关

c . 当数组中出现唯一一个单身狗数字,那么 0 ^ singleDog == singleDog

d. 所以:这个singleDog就是将所有数组异或之后的结果

代码呼之欲出:

class Solution { public: int singleNumber(vector<int>& nums) { int sigledog = 0;// 设置单身狗的初始值为0,因为0和任何数异或都保持为该数 for(auto& e:nums) { sigledog ^= e; } return sigledog; } };

总结以及完整参考代码

class Solution { public: int singleNumber(vector<int>& nums) { map<int,int> mp;// 数字 ,出现的次数 for(auto e:nums) { mp[e]++; } for(auto e:nums) { if(mp[e] == 1) return e; } } };
class Solution { public: int singleNumber(vector<int>& nums) { int sigledog = 0;// 设置单身狗的初始值为0,因为0和任何数异或都保持为该数 for(auto& e:nums) { sigledog ^= e; } return sigledog; } };

本周其他算法一见:

15 . 有效的括号-CSDN博客

16 . 买卖股票的最佳时机-CSDN博客

17 . 爬楼梯-CSDN博客

18 . 杨辉三角-CSDN博客

20 . 多数元素-CSDN博客

赶快动起手来吧

相关新闻

  • 第四周算法清单
  • 车载 SerDes 学习指南:原理、芯片、选型与工程实践
  • AI如何快速生成50000个有效电子邮件地址

最新新闻

  • 2026沈阳钻石回收没有证书能卖吗?实测1200笔无票钻石成交记录 - 奢品小当家
  • 本草拾光商行 —— 承德满族人,全品类回收,专业爱好驱动,报价地道 - 深鉴新闻
  • 广州古董珠宝也能卖高价,懂行老板不压价 - 奢品小当家
  • 20260619 了解V8规则
  • 2026 年 6 月最新无锡同城购宠评分榜实测|7 家正规猫舍犬舍横向测评,附近实体门店避坑全攻略 - 吉林同城获客
  • 广州租办公室哪里好?万博德舜大厦A塔居首,2026年6月四大商务区深度横评 - 速递信息

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号