leetcode:只出现一次的数字(原理分析)

一.异或运算(^)

当我们对一个变量进行异或运算时,运算规则如下:

0 ⊕ 0 = 0
0 ⊕ 1 = 1
1 ⊕ 0 = 1
1 ⊕ 1 = 0
现在假设我们有一个数组 [2, 2, 1, 3, 3],我们将对数组中的所有元素进行异或运算:

首先 ret = 0
第一次操作:ret = 0 ⊕ 2 = 2
第二次操作:ret = 2 ⊕ 2 = 0
第三次操作:ret = 0 ⊕ 1 = 1
第四次操作:ret = 1 ⊕ 3 = 2
第五次操作:ret = 2 ⊕ 3 = 1
最终的 ret 的值为1,这个结果就是出现一次的那个数字。整个过程中,出现两次的数字都相互抵消,剩下的就是出现一次的数字。

二.产生抵消效果的原因

这种抵消的效果是由于异或运算的性质导致的。异或运算有一个重要的特性,即对同一个值进行两次异或操作,最终的结果将会恢复到原值。

在这个问题中,假设我们有一个数组 [a, a, b, c, c],其中 a 出现两次,b 和 c 各出现一次。如果我们对所有元素进行异或运算,过程如下:

初始情况:ret = 0
第一次操作:ret = ret ^ a = a
第二次操作:ret = a ^ a = 0
第三次操作:ret = 0 ^ b = b
第四次操作:ret = b ^ c = b ^ c
第五次操作:ret = (b ^ c) ^ c = b ^ (c ^ c) = b ^ 0 = b
由于所有出现两次的元素在进行异或操作后相互抵消,最终的结果将是唯一出现一次的元素。这是因为异或运算的性质保证了抵消效果,最终只有出现一次的元素能够保留。

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

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

相关文章

visual studio 创建c++项目

目录 环境准备:安装 visual studiovisual studio 创建c项目Tips:新建cpp文件注释与取消注释代码 其他初学者使用Visual Studio开发C和C时常遇到的3个坑 环境准备:安装 visual studio 官网:https://visualstudio.microsoft.com/zh…

ThreadLocal的原理

ThreadLocal原理 1ThreadLocal是一个工具类,为每个线程提供自己专属的本地变量 2ThreadLocal底层是通过ThreadLocalMap实现的,每个Thread对象中存在一个ThreadLocalMap,Map的key为ThreadLocal对象,Map的value为要缓存的值。 Thre…

中介子方程二十九

XXFXXuXXWXXuXXdXXrXXαXXuXXαXXrXXdXXuXWXπXXWXeXyXeXbXπXpXXNXXqXeXXrXXαXXuXXαXXrXXeXqXXNXXpXπXbXeXyXeXWXXπXWXuXXdXXrXXαXXuXXαXXrXXdXXuXXWXXuXXFXXEXXyXXEXXrXXαXXuXXαXXrXXEXXyXXαXiXXαXiXrXkXtXyXXpXVXXdXuXWXπXXWXeXyXeXbXπXpXXNXXqXeXXrXXαXXuXXα…

【十三】图解mybatis缓存模块之装饰器模式

图解mybatis缓存模块之装饰器模式 简介 之前有写过一篇博客介绍过mybatis的缓存模块设计【九】mybatis 缓存模块设计-CSDN博客 ,当时着重讲解的是mybatis种一级缓存和二级缓存,本次博客补充讲解一下装饰器模式的应用,本篇主要分两部分讲解&a…

kotlin智能类型转换

1、在kotlin这中,定义如下类型,在判断不为null的语句里边,会发生类型转换: fun main(){var a:String? "XXX" // a 类型为 String? 可能为 null// 在if 语句中,a 的类型为 Stringif(a ! null){println(a.l…

动态ARP

定义 动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。 动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。 ARP地址解析过程 动态ARP通过广播ARP请求和单播ARP应答这两个过…

使用 Kubernetes 部署 MinIO 和 Trino

Trino(以前称为 Presto)是一个 SQL 查询引擎,而不是 SQL 数据库。Trino 避开了 SQL 数据库的存储组件,只专注于一件事 - 超快的 SQL 查询。Trino 只是一个查询引擎,不存储数据。相反,Trino与各种数据库交互…

GWO-CNN-SVM,基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

GWO-CNN-SVM,基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1. GWO灰狼优化算法 灰狼优化算法(Grey Wolf Optimizer, GWO)是一种启发式优化算法,模拟了灰狼群体的社会行为,包…

天马学航——智慧教务系统(移动端)开发日志六

天马学航——智慧教务系统(移动端)开发日志六 日志摘要:统一身份认证设计,修复了选课信息错乱的问题 界面设计 实现思路 使用 Java 和 Jedis 完成实现: 步骤一:添加 Jedis 依赖 首先需要在项目中添加 Jedis 依赖,…

使用海康威视的SDK,利用WPF设计一个网络摄像头的显示控制程序(上位机)

目录 一、下载海康威视的SDK 1.1 关于SDK 1.2 关于API 1.3 关于DLL 1.4 下载海康威视的SDK 1.5 关于网络高清摄像机 二、对下载的SDK进行调试 三、利用Visual Studio打开项目的解决方案 3.1 Visual Studio 2022下载 3.2 关于句柄 四、打开WPF进行ui页面设计 4.1 关…

react笔记-03react-router篇

本文章是react的路由笔记 一、react路由(v5版本) 1. 什么是路由(前端)? 一个路由就算一个映射关系(key: value)key为路径,value为组件 2. 前端路由的工作原理 根据浏览器历史记录&#xff…

双例集合(三)——双例集合的实现类之TreeMap容器类

Map接口有两个实现类,一个是HashMap容器类,另一个是TreeMap容器类。TreeMap容器类的使用在API上于HashMap容器类没有太大的区别。它们的区别主要体现在两个方面,一个是底层实现方式上,HashMap是基于Hash算法来实现的吗&#xff0c…

【Qt6.3 基础教程 04】探索Qt项目结构和配置文件

文章目录 前言Qt项目的基本结构配置文件:.pro文件基本构成示例.pro文件: qmake和构建过程步骤简述: 修改项目设置结论 前言 当你开始使用Qt进行开发时,理解项目结构和配置文件的作用是至关重要的。这篇博文将带你深入了解Qt项目的…

什么是电商大数据?主流电商大数据的采集||关键性技术|电商API接口接入说明

大数据的时代早已到来,然而想要全方位掌握大数据,务必要掌握大数据造成的时代特征,之前大数据被视为废物,如今被视为财产。主流电商大数据的采集,电商API接口的接入在大多数人理解中,是企业用数据来优化自己…

HackTheBox-Linux基础

Linux 结构 历史 许多事件导致了第一个 Linux 内核的创建,并最终创建了 Linux 操作系统 (OS),从 1970 年 Ken Thompson 和 Dennis Ritchie(当时都在 AT&T 工作)发布 Unix 操作系统开始。伯克利软件发行…

什么叫图像的均值滤波,并附利用OpenCV和MATLB实现均值滤波的代码

均值滤波是一种常见的图像处理技术,主要用于平滑图像、去除噪声。它通过计算图像中每个像素及其邻域像素的平均值来实现。具体过程如下: 定义滤波器窗口:选择一个窗口(通常是一个正方形或矩形,比如 33或 55 的大小&…

TDengine Cloud 新增签约,这次是能源物联网平台

最近,全托管的物联网、工业大数据云服务平台 TDengine Cloud 新增一项签约🥳。为进一步提升平台的数据处理能力与系统稳定性,推动智能设备数据管理和能效优化到新的高度, 德中恒越物联网数据平台选择应用 TDengine Cloud ☁️。 …

微信小程序毕业设计-餐厅点餐系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

使用Java进行跨平台开发的技巧

使用Java进行跨平台开发的技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! Java自诞生以来,就以其“Write Once, Run Anywhere”(一…

OCC显示渲染结构剖析

1.Display显示 2.Drawer 3.Graphics 4.InteractiveContext 5.Render 6.Selection 7.View