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

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

AC截图

题目

代码

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        if(nums.size()==1) return nums[0];
        sort(nums.begin(),nums.end());
        for(int i=1;i<nums.size()-1;){
            if(nums[i]==nums[i-1]){
                i+=2;
            }else{
                return nums[i-1];
            }
        }
        return nums[nums.size()-1];
    }
};

优化思路

优化的核心在于利用了异或运算的以下性质:

  1. 交换律a ^ b = b ^ a

  2. 结合律(a ^ b) ^ c = a ^ (b ^ c)

  3. 任何数与自身异或结果为0a ^ a = 0

  4. 任何数与0异或结果为其本身a ^ 0 = a

基于这些性质,考虑如下情况:

  • 如果数组中有两个相同的数字 a,它们的异或结果是 a ^ a = 0

  • 如果我们将数组中所有数字进行异或操作,成对出现的数字会相互抵消(因为 a ^ a = 0),而只出现一次的那个数字会保留下来(因为 a ^ 0 = a)。

优化代码

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ret = 0;
        for(int num:nums){
            ret ^= num;
        }
        return ret;
    }
};

http://www.dtcms.com/a/51171.html

相关文章:

  • 麒麟V10-SP2-x86_64架构系统下通过KVM创建虚拟机及配置虚机的NAT、Bridge两种网络模式全过程
  • pthon翻译googletrans案例
  • 高级课第五次作业
  • flink和yarn和mpp架构区别
  • 【菜笔cf刷题日常-1600】C. Balanced Stone Heaps(二分求min/max)
  • Linux -- I/O接口,文件标识符fd、file结构体、缓冲区、重定向、简单封装C文件接口
  • MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享
  • Android 系统开发的指导文档
  • 前端知识一
  • 【Linux】配置hosts
  • C# IEquatable<T> 使用详解
  • kali_Linux_2024安装frida==12.8.0
  • Xcode 运行真机失败
  • 前端面试题---.onChange() 事件与焦点机制解析
  • python爬虫:python中使用多进程、多线程和协程对比和采集实践
  • pyside6学习专栏(九):在PySide6中使用PySide6.QtCharts绘制6种不同的图表的示例代码
  • jenkins流程概述
  • Vue 调用摄像头扫描条码
  • 【零基础到精通Java合集】第二十三集:G1收集器深度解析
  • Git 强制同步远程仓库:如何彻底放弃本地更改并同步远程数据?
  • printf 与前置++、后置++、前置--、后置-- 的关系
  • 数据库设计理论与实践
  • 软件试用 防破解 防软件调试(C# )
  • 2025前端岗位技术需求统计+前端进阶抗AI取代详解
  • 458. 可怜的小猪
  • iOS安全和逆向系列教程 第3篇:搭建iOS逆向开发环境 (上) - 工具链与基础配置
  • 力扣HOT100之哈希:1. 两数之和
  • 笔记:代码随想录算法训练营第35天: 01背包问题 二维、 01背包问题 一维 、LeetCode416. 分割等和子集
  • [杂学笔记]HTTP1.0和HTTP1.1区别、socket系列接口与TCP协议、传输长数据的时候考虑网络问题、慢查询如何优化、C++的垃圾回收机制
  • Echarts在resize时报错