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

136. 只出现一次的数字

目录

一、问题描述

二、解题思路

三、代码

四、复杂度分析


一、问题描述

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

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

二、解题思路

异或 XOR 的几个性质:

  1. a ^ a = 0(任何数和自己异或为0)

  2. a ^ 0 = a(任何数和0异或还是它本身)

  3. 异或满足 交换律结合律a ^ b ^ c = a ^ (b ^ c)

所以如果一个数组中:

  • 所有元素都出现 两次,只有一个元素出现 一次

  • 那么我们把数组里所有数字都异或一遍,成对的数会变成 0,最终结果就是那个 只出现一次的数

示例:

 

cpp

复制编辑

nums = [2, 3, 2, 3, 5]

这里:

  • 2 出现了两次

  • 3 出现了两次

  • 只有 5 出现了一次,结果应该返回 5


🚀 为什么用异或?

🔢 异或的核心特点:
操作结果含义
a ^ a0自己跟自己异或等于 0
a ^ 0a任何数与 0 异或还是它自己
异或满足 交换律结合律a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b顺序不重要


✅ 用异或解这道题的逻辑:

假设你从左到右,遍历 nums,把所有数都异或到一个变量 result 中。

由于所有数都出现两次,它们“配对异或”之后变成了 0只有那个“只出现一次”的数还剩下来!


🧮 举个完整例子:

nums = [4, 1, 2, 1, 2]

我们用异或来操作:

步骤当前数字异或结果 (result)
初始-0(初始值)
140 ^ 4 = 4
214 ^ 1 = 5
325 ^ 2 = 7
417 ^ 1 = 6
526 ^ 2 = 4

最后结果是 4,就是我们想找的答案!

三、代码

class Solution {
public:int singleNumber(vector<int>& nums) {int result = 0; // 初始结果设为 0// 遍历数组中的所有元素for (int num : nums) {result ^= num; // 把每个数和 result 做异或}return result; // 最后剩下的就是只出现一次的数}
};

四、复杂度分析

项目复杂度说明
⏱ 时间复杂度O(n)只遍历一次数组
🧠 空间复杂度O(1)只用一个整型变量 result

五、小结

  • 什么异或能解决这个问题?
    因为成对的数字会变成 0,只出现一次的那个数字会被留下。

  • 为什么时间是 O(n)?
    因为你只遍历了一次数组。

  • 为什么空间是 O(1)?
    只用了一个整型变量,不管数组多大。

相关文章:

  • CSP 2024 入门级第一轮(88.5)
  • NodeJS中老生代和新生代和垃圾回收机制
  • Luckfox Pico Pi RV1106学习<3>:支持IMX415摄像头
  • 深度学习:PyTorch自动微分模块
  • 修改了xml布局代码,页面使用了databinding,此时不开启kapt也可以吗
  • Yolo11改进策略:Block改进|MKP,多尺度卷积核级联结构,增强感受野适应性|即插即用|AAAI 2025
  • c++26新功能—契约与概念
  • 华为OD-2024年E卷-英文输入法[100分] -- python
  • 深入实践Caffeine+Redis两级缓存架构:从原理到高可用设计
  • ubuntu 22.04 安装部署elk(elasticsearch/logstash/kibana) 7.10.0详细教程
  • 【JVM】- 内存模式
  • 如何在Windows上使用qemu安装ubuntu24.04服务器?
  • 【Elasticsearch】文档(二):更新
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(四)
  • Matlab数字信号处理——基于GUI的ECG信号处理平台设计与实现
  • 解决docker下的Linux系统调用GPU失败
  • STM32 HAL库学习 RNG篇
  • 国产操作系统-银河麒麟本地化部署Ollama国产开源的AI大模型Qwen3
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio平台与Cherry Studio搭建知识库问答助手
  • 【运维系列】【ubuntu22.04】安装Docker
  • wordpress 整站下载/发布
  • wordpress左右/seo超级外链
  • 嘉兴手机网站开发费用/中国十大公关公司排名
  • c 2015 做网站/外链怎么打开
  • 怎么自己做网站挂到百度上/百度云网盘搜索引擎
  • 荔湾网站建设公司/东莞关键词seo