LeetCode算法位运算—只出现一次的数字

目录

136. 只出现一次的数字 - 力扣(LeetCode)

解题思路:

代码:

运行结果:

补充

 异或的重要性质


136. 只出现一次的数字 - 力扣(LeetCode)

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

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

示例 1 :

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

示例 2 :

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

示例 3 :

输入:nums = [1]
输出:1

提示:

  • 1 <= nums.length <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104
  • 除了某个元素只出现一次以外,其余每个元素均出现两次。

解题思路:

异或运算(^)的性质:

  • 异或运算满足交换律和结合律,即a^b^c = a^(b^c)。
  • 对于任何数x,x^x=0,即一个数与自己异或的结果为0。
  • 对于任何数x,x^0=x,即一个数与0异或的结果为它本身。

考虑到这些性质,让我们看一下代码的执行过程:

  1. 初始化变量a为0。
  2. 遍历数组nums中的每个元素:
    • 将a与当前元素进行异或操作,即a^=nums[i]。
    • 异或操作会将出现两次的数字消除,因为两个相同的数字异或的结果为0。
    • 异或操作会将只出现一次的数字留下,因为任何数字与0异或的结果为它本身。
    • 最终,a将保留只出现一次的数字。
  3. 返回变量a作为结果。

现在,让我们通过一个案例来解析这段代码:

假设输入数组nums为[2, 4, 2, 1, 4],其中只有数字1只出现一次,其他数字都出现了两次。

执行过程如下:

  1. 初始化变量a为0。
  2. 遍历数组nums:
    • 第一次循环:a^=2,a的值变为2。
    • 第二次循环:a^=4,a的值变为6。
    • 第三次循环:a^=2,a的值变为4。
    • 第四次循环:a^=1,a的值变为5。
    • 第五次循环:a^=4,a的值变为1。
  3. 返回a的值1作为结果。

代码:

class Solution {public int singleNumber(int[] nums) {int a=0;for(int i=0;i<nums.length;i++){a^=nums[i];}return a;}
}

运行结果:

补充

 异或的重要性质

  1. 结合律:异或运算满足结合律,即对于任意三个数a、b和c,满足 (a ^ b) ^ c = a ^ (b ^ c)。

  2. 自反性:任何数与自身进行异或运算的结果为0,即 a ^ a = 0。这是因为异或运算可以看作是"无进位相加",而相同的位进行异或运算结果为0。

  3. 零元素:0是异或运算的零元素,即对于任何数a,满足 a ^ 0 = a。这是因为异或运算中,任何数与0进行异或运算结果为它本身。

  4. 逆元素:每个数在异或运算中都有逆元素,即对于任何数a,存在一个数b,满足 a ^ b = 0。这意味着可以通过异或运算来撤销一个数的影响。

  5. 消除相同元素:当数组中有成对出现的相同元素时,对整个数组进行异或运算,最终结果为0。这是因为相同元素异或的结果为0,而异或运算满足交换律和结合律。

这些性质使得异或运算在很多场景下非常有用,例如查找只出现一次的数字、判断两个数是否相等、交换两个变量的值等。通过利用这些性质,可以简化问题的处理和求解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/108591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于python pytorch 与CUDA版本相关问题

首先在终端中输入python进入python交互式环境 import torch print(torch.__version__) #注意是双下划线官网&#xff1a;https://pytorch.org/get-started/previous-versions/ CUDA Toolkit版本及可用PyTorch对应关系总结&#xff08;参考官网&#xff09; cuda版本确定后&a…

问题记录1 json解析问题

问题&#xff1a; json解析int类型不符合预期&#xff0c;使用json.NewDecoder解决。 示例如下&#xff1a; package mainimport ("bytes""encoding/json""fmt" )func main() {data1 : map[string]interface{}{}data1["id"] int64(4…

Fluent瞬态结果的时间统计处理

声明&#xff1a;本文基于 2023R2 版&#xff0c;在其他版本中界面操作、可设置内容等可能存在区别。 1 背景 仿真中有时需要对区域上每个位置的结果数据进行统计分析&#xff0c;例如需要统计设备表面的压力脉动情况&#xff0c;并找出压力脉动最大的位置。在Fluent中对结果…

做web自动化测试遇到Chrome浏览器老是自动更新,怎么办 ? 这里提供两个解决办法 。

web自动化安装驱动安装 进行web自动化时 &#xff0c;需要提前安装浏览器的驱动 &#xff0c;尤其是chrome浏览器 。它的更新速度很快 &#xff0c;是不是更新了新版本 。这就导致我们的驱动也要跟着变化。 1.停止自动更新 那么 &#xff0c;如何关闭chrome浏览器的自动更新…

MySQL事务MVCC详解

一、概述 MVCC (MultiVersion Concurrency Control) 叫做多版本并发控制机制。主要是通过数据多版本来实现读-写分离&#xff0c;做到即使有读写冲突时&#xff0c;也能做到不加锁&#xff0c;非阻塞并发读&#xff0c;从而提高数据库并发性能。 MVCC只在已提交读&#xff08…

Leetcode刷题详解——将x减到0的最小操作数

1. 题目链接&#xff1a;1658. 将 x 减到 0 的最小操作数 2. 题目描述: 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&#xff0c;然后从 x 中减去该元素的值。请注意&#xff0c;需要 修改 数组以供接下来的操作…

Linux高性能服务器编程 学习笔记 第十四章 进程池和线程池

动态创建子进程或子线程的缺点&#xff1a; 1.动态创建进程或线程比较耗时&#xff0c;这将导致较慢的客户响应。 2.动态创建的子进程或子线程通常只用来为一个客户服务&#xff08;除非我们做特殊处理&#xff09;&#xff0c;这将导致系统上产生大量的进程或线程&#xff0c…

windows安装npm教程

在安装和使用NPM之前&#xff0c;我们需要先了解一下&#xff0c;NPM 是什么&#xff0c;能干啥&#xff1f; 一、NPM介绍 NPM&#xff08;Node Package Manager&#xff09;是一个用于管理和共享JavaScript代码包的工具。它是Node.js生态系统的一部分&#xff0c;广泛用于构…

CVE-2017-7529 Nginx越界读取内存漏洞

漏洞概述 当使用Nginx标准模块时&#xff0c;攻击者可以通过发送包含恶意构造range域的header请求&#xff0c;来获取响应中的缓存文件头部信息。在某些配置中&#xff0c;缓存文件头可能包含后端服务器的IP地址或其它敏感信息&#xff0c;从而导致信息泄露。 影响版本 Ngin…

C++对象模型(10)-- 虚函数2

1、虚函数表、虚函数表指针的创建时机 我们知道虚函数表是属于类的&#xff0c;而虚函数表指针是属于对象的。在编译的时候&#xff0c;编译器会往类的构造函数中插入创建虚函数表指针的代码。同样&#xff0c;在编译期间编译器也为每个类确定好了对应的虚函数表的内容。 虚函…

华为云云耀云服务器L实例评测|使用sysbench对云耀云服务器mysql的性能测试

目录 引言 1 在centos上安装mysql 1.1 在云服务器上安装 Docker 1.2 在 Docker 中运行 MySQL 容器 2 安装sysbench并进行性能测试 2.1 安装和配置 sysbench 2.2 运行 sysbench 性能测试 3 分析测试结果 3.1 运行结果 3.2 对运行结果进行翻译 3.3 性能分析 4 清理…

设计模式_命令模式

命令模式 介绍 定义案例问题堆积在哪里解决办法 行为形设计模式 就是把 “发布命令 执行命令”细化为多个角色 每个角色又能继续细化 发布命令 1 打印1-9 a 打印A-G 如果有更多的命令 命令处理方式更加多样性 更复杂 处理命令的顺序拆分角色&#xff1a;降低耦合度 命令类&am…

如何让大模型自由使用外部知识与工具

本文将分享为什么以及如何使用外部的知识和工具来增强视觉或者语言模型。 全文目录&#xff1a; 1. 背景介绍 OREO-LM: 用知识图谱推理来增强语言模型 REVEAL: 用多个知识库检索来预训练视觉语言模型 AVIS: 让大模型用动态树决策来调用工具 技术交流群 建了技术交流群&a…

基于五折交叉验证的支持向量机SVR回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

webdriver.Chrome()没反应

今天学习爬虫安装selenium之后刚开始webdriver.Chrome()正常 后面运行突然卡在这一步了 百度发现是版本不匹配 我们下载旧版本的chrome Download Google Chrome 95.0.4638.69 for Windows - Filehippo.com 禁用chrome的自动更新 打开文件所在位置 点击Google文件夹 右键up…

http代理有什么好处,怎么通过http代理服务安全上网呢?

通过http代理上网是一种常见的网络代理方式。http代理是指通过代理服务器进行网络连接&#xff0c;以实现隐藏自己的真实IP地址、保护个人隐私等目的。下面我们将介绍通过http代理上网的好处以及如何使用http代理服务来安全上网。 一、通过http代理上网的好处 1. 保护个人隐私 …

大数据学习(12)-join优化common join

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…

6.6 图的应用

思维导图&#xff1a; 6.6.1 最小生成树 ### 6.6 图的应用 #### 主旨&#xff1a;图的概念可应用于现实生活中的许多问题&#xff0c;如网络构建、路径查询、任务排序等。 --- #### 6.6.1 最小生成树 **概念**&#xff1a;要在n个城市中建立通信联络网&#xff0c;则最少需…

EmoTalk: Speech-Driven Emotional Disentanglement for 3D Face Animation

问题:现存的方法经常忽略面部的情感或者不能将它们从语音内容中分离出来。 方法:本文提出了一种端到端神经网络来分解语音中的不同情绪,从而生成丰富的 3D 面部表情。 1.我们引入了情感分离编码器(EDE),通过交叉重构具有不同情感标签的语音信号来分离语音中的情感和内容。…