【每日题解】540. 有序数组中的单一元素

给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。

你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。

示例 1:

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

示例 2:

输入: nums =  [3,3,7,7,10,11,11]
输出: 10

思路

本来是O(n)循环遍历一圈就可以,但是题目要求时间复杂度必须是 O(log n) ,所以要采用二分法,同时空间复杂度要满足 O(1),所以我们要采用一种不通过比较的方法找到只出现一次的数字。

通过观察和理解题意,因为其他数字都是成对出现,并且只有我们要找的数字出现一次,因此 nums 的总长度一定是奇数,因此我们一定能找到唯一的 mid 值。同时我们只要比较 mid 和它左边或右边的数字是否相等,就能找到出现一次的数字在 mid 左边还是右边。

因为如果 mid 是奇数,则应该和它右边的数字相比较,因为成对出现的数字一定会形成偶数长度。如果 mid 是偶数则和它左边的数字相比较。然后更新端点即可。

代码(C++)

class Solution {
public:int singleNonDuplicate(vector<int>& nums) {int low = 0, high = nums.size() - 1;while (low < high) {int mid = (high - low) / 2 + low;if (nums[mid] == nums[mid ^ 1]) {low = mid + 1;} else {high = mid;}}return nums[low];}
};

1. 异或操作符 (^)

异或操作符 (^) 是一种位操作符,用于对两个二进制数的每一位进行比较。如果两个位相同,结果为 0,如果两个位不同,结果为 1。例如:

  • 0 ^ 0 = 0

  • 0 ^ 1 = 1

  • 1 ^ 0 = 1

  • 1 ^ 1 = 0

在整数上使用异或操作符时,结果是两个整数的每一位进行异或操作后的结果。例如:

  • 5 ^ 1 = 4 (二进制表示:101 ^ 001 = 100

  • 6 ^ 1 = 7 (二进制表示:110 ^ 001 = 111

2. mid ^ 1 的作用

在二分查找或其他算法中,mid 通常表示当前的中间索引。mid ^ 1 的作用是根据 mid 的奇偶性来选择相邻的索引:

  • 如果 mid 是偶数,mid ^ 1 会得到 mid + 1

  • 如果 mid 是奇数,mid ^ 1 会得到 mid - 1

这是因为:

  • 对于偶数 midmid 的二进制表示的最后一位是 0,所以 mid ^ 1 会将最后一位从 0 变为 1,即 mid + 1

  • 对于奇数 midmid 的二进制表示的最后一位是 1,所以 mid ^ 1 会将最后一位从 1 变为 0,即 mid - 1

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

09 Oracle数据拯救:Flashback Technologies精细级数据恢复指南

文章目录 09 Oracle数据拯救&#xff1a;Flashback Technologies精细级数据恢复指南一、Flashback Technologies概览二、Flashback Query&#xff1a;查询过去的数据三、Flashback Table&#xff1a;恢复整个表四、Flashback Database&#xff1a;恢复整个数据库五、总结与最佳…

BIST(Built-in Self-Test,内建自测试)学习笔记

参考资料: 内建自测试&#xff08;Built-in Self-Test&#xff0c;简称BIST&#xff09;详解_built in self test-CSDN博客 芯片测试术语 &#xff0c;片内测试(BIST)&#xff0c;ATE测试-CSDN博客 可能是DFT最全面的介绍--BIST - 知乎 (zhihu.com) 汽车功能安全--TC3xx LB…

three.js 杂记

在Three.js中&#xff0c;Object3D是所有3D对象的基类&#xff0c;而Group是Object3D的一个子类。Group的目的是为了简化处理多个对象的集合。当你将对象添加到Group中时&#xff0c;它们会以一个单元格的形式被处理&#xff0c;参与Group的某些操作&#xff0c;例如位置更新、…

go函数传值是值传递?还是引用传递?slice案例加图解

先说下结论 Go语言中所有的传参都是值传递&#xff08;传值&#xff09;&#xff0c;都是一个副本&#xff0c;一个拷贝。 值语义类型&#xff1a;参数传递的时候&#xff0c;就是值拷贝&#xff0c;这样就在函数中就无法修改原内容数据。 基本类型&#xff1a;byte、int、bool…

穿越时空的全球时钟:一个实时多时区显示的网页应用

引言 在当今这个全球化时代&#xff0c;人们经常需要与世界各地的朋友、同事或客户进行沟通。然而&#xff0c;由于时差的存在&#xff0c;找到一个合适的沟通时间往往成为一大挑战。为了解决这一问题&#xff0c;我们开发了一个名为“全球时钟”的网页应用&#xff0c;它能够…

本地部署免费开源助手Ollama

Ollama 安装 安装ollama 官方网站&#xff1a;https://ollama.com/download 2. 安装成功 3. 运行模型 模型&#xff1a;https://ollama.com/library 运行&#xff1a; ollama run llama3.2:3b Mac 、Linux 版本安装类似。 Open-WebUI界面安装 openwebui官网&#xff1a;http…

three.js杂记

空间 - 位置变换&#xff1a; // 假设有一个Three.js的对象: object3D // 存储矩阵位置 const matrix object3D.matrix.clone(); const matrixArray matrix.toArray(); // 转换为数组 // 之后&#xff0c;当你需要恢复位置时 object3D.matrix.fromArray(matrixArray); …

通过DNS服务器架构解释DNS请求过程

在前面的章节,这里,基于PCAP数据包和RFC文档详细介绍了DNS请求和响应的每个字段的含义。但是在现实的网络世界中,DNS请求和响应的数据包是怎么流动的,会经过哪些设备。本文将着重说明一下目前网络空间中DNS请求和响应的流动过程。 当前网络空间中比较常见DNS请求的流程如下…

HBase使用create创建表时报错ERROR: KeeperErrorCode = NoNode for /hbase/master

场景模拟 1. 正常情况 模拟ERROR: KeeperErrorCode NoNode for /hbase/master错误场景。 正常情况下创建hbase表如下图所示。 2. 删除hbase集群的zk节点 进入zookeeper客户端。 zkCli.sh删除hbase的zk节点。 deleteall /hbase退出zookeeper客户端。 quit3. 重启hbase集…

软件分享丨火绒应用商店

【资源分享】 资源名&#xff1a;火绒应用商店 官方网址&#xff1a;点击跳转 火绒应用商店是由火绒安全推出的一款独立软件。它提供了海量的应用程序&#xff0c;涵盖办公、社交、游戏、视频、工具等多种领域和类别&#xff0c;方便用户轻松找到所需的应用并进行一键下载安装…

在线考试系统demo页面

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>在线考试系统</title><link rel"styl…

从0到1基于LangChain制作一个AI猫娘

前言&#xff1a; 看到B站上的AIVtuber的项目落地了&#xff0c;就心血来潮想制作一个AI的猫娘供自己使用&#xff0c;顺便出一个简单的教程&#xff0c;跳过理论&#xff0c;直接实践&#xff0c;作者也还在学习摸索中&#xff0c;所以有错误可以直接在评论区指正。&#xff0…

前端---高效工具(一) : NVM的使用

一、NVM用途 方便快捷 管理和切换各个 node版本。现在前端项目Vue2与Vue3很多项目要求的node版本不一致导致的。 二、安装 如果有安装nodejs&#xff0c;按一下步骤清理环境 1.卸载应用程序的 nodejs 2.删除环境变量中nodejs的配置 3.删除C:\Users\Administrator 中最下面…

反序列化漏洞浅析

Apache InLong 是开源的高性能数据集成框架&#xff0c;支持数据接入、数据同步和数据订阅&#xff0c;同时支持批处理和流处理&#xff0c;方便业务构建基于流式的数据分析、建模和应用。浅析Apache InLong < 1.12.0 JDBC反序列化漏洞&#xff08;CVE-2024-26579&#xff0…

三周精通FastAPI:39 用FastAPI CLI命令行程序管理FastAPI项目

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/fastapi-cli/ FastAPI CLI FastAPI CLI 是一个命令行程序&#xff0c;你可以用它来部署和运行你的 FastAPI 应用程序&#xff0c;管理你的 FastAPI 项目&#xff0c;等等。 当你安装 FastAPI 时&#xff08;例如使用 p…

Bean实例化

Bean有3种实例化方法 1.通过无参构造方法实例化 假如我们有以下结构&#xff1a; 这里我们在无参构造方法种打印字符串&#xff1a; 然后我们运行 可知&#xff0c;IoC管理bean进行实例化的时候是通过无参构造方法实例化的。 2.静态工厂实例化 假设我们有以下配置文件&…

【网络安全】线程安全分析及List遍历

未经许可,不得转载。 文章目录 线程线程安全问题遍历List的方式方式一方式二方式三方式四(Java 8)方式五(Java 8 Lambda)遍历List的同时操作ListVector是线程安全的?使用线程安全的CopyOnWriteArrayList使用线程安全的List.forEach线程 线程是程序执行的最小单位。一个程…

ReactPress 安装指南:从 MySQL 安装到项目启动

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 ReactPress 是一个基于 React 的开源发布平台&#xff0c;适用于搭建博客、网站或内容管理系统&#xff08;CMS&#xff09;。本文将详细介绍如何安装 ReactPress&#xff0c;包括…

caozha-whois(域名Whois查询源码)

caozha-whois&#xff0c;是一个采用原生PHP写的域名Whois查询模块&#xff0c;支持全球大部分域名的whois查询&#xff0c;支持中文域名在内的多种域名后缀&#xff0c;包括&#xff1a;.com&#xff0c;.net&#xff0c;.cn&#xff0c;.com.cn&#xff0c;.org&#xff0c;.…

2024 年(第 7 届)“泰迪杯”数据分析技能赛A 题 自动化生产线数据分析 完整代码结果分享

一、背景 随着信息技术的快速发展&#xff0c;工业自动化领域的智能控制系统日益完善。自动化生产线能够独立完成从物料输送到元件抓取&#xff0c;再到产品安装和质量检验的各个环节&#xff0c;这不仅极大提升了制造效率和产品质量&#xff0c;也有效降低了生产成本。 为了使…