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

力扣 136.只出现一次的数字

一、题目

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

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

示例 1 :

      输入:nums = [2,2,1]

      输出:1

示例 2 :

      输入:nums = [4,1,2,1,2]

      输出:4

示例 3 :

      输入:nums = [1]

      输出:1

二、解题思路

  1. 问题分析

    • 数组中除一个元素只出现一次外,其余元素均出现两次
    • 要求:线性时间复杂度(O (n))和常量空间复杂度(O (1))
  2. 关键发现

    • 异或(XOR)运算的特殊性质:
      • 任何数与自身异或结果为 0(例如:5 ^ 5 = 0)
      • 任何数与 0 异或结果为自身(例如:5 ^ 0 = 5)
      • 异或运算具有交换律和结合律(顺序不影响结果)
  3. 解题步骤

    • 初始化一个变量(如result)为 0
    • 遍历数组中的每个元素,依次与result进行异或运算
    • 最终result的值就是只出现一次的元素
    • 原理:出现两次的元素会相互抵消(结果为 0),最后剩下的就是唯一出现一次的元素

三、代码

int singleNumber(int* nums, int numsSize) {int result = 0;// 遍历数组,将所有元素进行异或运算for (int i = 0; i < numsSize; i++) {result ^= nums[i];}return result;
}

四、总结

  1. 算法优势

    • 时间复杂度:O (n),只需遍历一次数组
    • 空间复杂度:O (1),仅使用一个额外变量
    • 无需排序或哈希表等辅助结构,效率极高
  2. 核心原理

    • 利用异或运算的特性,将所有元素依次异或
    • 成对出现的元素会相互抵消(结果为 0)
    • 最终结果自然就是那个只出现一次的元素
http://www.dtcms.com/a/392239.html

相关文章:

  • 【序列晋升】38 Spring Data MongoDB 的统一数据访问范式与实践
  • 如何将枯燥的大数据呈现为可视化的图和动画?
  • 前后端分离架构下,如何安全存储和使用 API 密钥?
  • Nano 编辑器快捷键
  • 《智能体教程》——如何构建多智能体系统:开发者实用指南
  • 小杰机器学习高级(three)——逻辑回归、二分类算法
  • Spring注解驱动开发:从XML到注解的完美蜕变
  • 【Spring AI】第三弹:深入解析 RAG 核心特性、关键流程、基于 Spring AI + 知识库实现 RAG 检索增强器
  • 【剪映】官方下载方式?【图文详解】电脑版下载?正版安全下载?最新版下载?
  • 《UE5_C++多人TPS完整教程》学习笔记56 ——《P57 未装备武器的蹲伏(Crouch Unequipped)》
  • AI人工智能训练师五级(初级)考试题库(1)1~100题
  • 【Python精讲 02】编程第一课:彻底掌握Python变量、数字、字符串与布尔值
  • Unity2D-Sprite
  • 本地实现视频分析与总结工具
  • Vue 开发常见报错及解决方案指南
  • Linux 进程状态
  • 基于自然语言处理的文本敏感内容检测系统的设计与实现
  • JDBC小白入门项目创建 IDEA 空项目+模块配置 JavaWeb MySQL
  • 笔记 Docker(离线)安装(24.0.9)
  • Docker-Android+cpolar:移动开发的环境革命
  • uniapp首先对战匹配简单实现
  • [bitcoin白皮书_2] 隐私 | 计算
  • 【杂谈】-重构注意力经济:人工智能重塑短视频内容生态
  • 【杂谈】Godot 4.5下载指南
  • CICD工具选型,Jenkins VS Arbess哪一款更好用?
  • iOS 26 续航测试实战,如何测电池掉电、Adaptive Power 模式功耗、新系统更新后的耗电差异与 App 续航优化指南
  • 数据挖掘与KDD:从理论到实践的最佳流程解析
  • 深入理解Linux网络中的Socket网络套接字——基础概念与核心实现
  • Spark专题-第二部分:Spark SQL 入门(4)-算子介绍-Exchange
  • Spark专题-第二部分:Spark SQL 入门(3)-算子介绍-Aggregate