leetcode 540.有序数组中的单一元素 中等

ops/2024/11/14 7:06:44/

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

请你找出并返回只出现一次的那个数。

你设计的解决方案必须满足 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

提示:

  • 1 <= nums.length <= 10e5
  • 0 <= nums[i] <= 10e5

 分析:根据题目要求,首先想到二分。对于当前的位置mid,如果它不是唯一出现的数,那么它的左边或者右边去掉和它相等的数字之后,一定有一边只有奇数个数字,此时进入这一边再次二分。边界条件为数组大小为1,或者mid仅出现过一次。

int getans(int *arr,int n,int l,int r)
{if(r==l)return arr[l];int mid=(l+r)/2;if(mid-1>=0&&mid+1<n){int temp=arr[mid];if(arr[mid-1]==temp||arr[mid+1]==temp){if(arr[mid-1]==temp){if((mid+1-2)%2==1)return getans(arr,n,l,mid-2);else return getans(arr,n,mid+1,r);}else{if((mid)%2==1)return getans(arr,n,l,mid-1);else return getans(arr,n,mid+2,r);}}}return arr[mid];
}int singleNonDuplicate(int* nums, int numsSize) {return getans(nums,numsSize,0,numsSize-1);
}


http://www.ppmy.cn/ops/133037.html

相关文章

FPGA学习笔记#7 Vitis HLS 数组优化和函数优化

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记&#xff1a;《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…

云原生周刊:Istio 1.24.0 正式发布

云原生周刊&#xff1a;Istio 1.24.0 正式发布 开源项目推荐 Kopf Kopf 是一个简洁高效的 Python 框架&#xff0c;只需几行代码即可编写 Kubernetes Operator。Kubernetes&#xff08;K8s&#xff09;作为强大的容器编排系统&#xff0c;虽自带命令行工具&#xff08;kubec…

图像融合self

噪声处理&#xff1a;高斯噪声&#xff0c;椒盐噪声 中值滤波&#xff0c;均值滤波&#xff0c;非局部均值滤波&#xff0c;变换滤波&#xff08;如小波变换阈值滤波&#xff09;&#xff0c;双边滤波 其中变换滤波以及双边滤波可以更少的损坏图像细节 特征检测与匹配&#…

【数据结构与算法】第10课—数据结构之插入排序

文章目录 1. 排序2. 排序算法3. 插入排序3.1 直接插入排序3.1 希尔排序 4. 插入排序时间复杂度和空间复杂度 1. 排序 什么是排序&#xff1f;所谓排序&#xff0c;就是使用一串记录&#xff0c;按照其中的某个字或或某些关键字来对其进行递增或递减式的排列。   简单通俗点讲…

【系统配置】命令行配置麒麟安全中心应用程序来源检查

原文链接&#xff1a;【系统配置】命令行配置麒麟安全中心应用程序来源检查 Hello&#xff0c;大家好啊&#xff01;今天带来一篇关于如何通过命令行配置麒麟系统安全中心应用程序来源检查的文章。应用程序来源检查是系统安全管理中的重要功能之一&#xff0c;它可以帮助用户识…

高边坡安全监测系统的工作原理和应用领域

高边坡安全监测系统的工作原理主要依赖于各种先进的传感器设备&#xff0c;这些传感器能够实时地捕捉和记录边坡的位移、应力、裂缝、倾斜和沉降等多种关键数据。这些数据的采集是通过高精度的监测设备进行的&#xff0c;确保了数据的准确性和可靠性。采集到的数据随后通过高效…

Elasticsearch可视化工具Elasticvue插件用法

目录 1.打开浏览器扩展程序(示例Edge浏览器) ​2.搜索elasticvue并安装 3.打开elasticvue ​4.连接Es 5.有些浏览器无法下载安装扩展&#xff0c;例如谷歌。可以打包扩展给别的浏览器使用。 5.1打开浏览器扩展&#xff0c;打开开发人员模式&#xff0c;记住扩展程序id 5…

第 6 章 - Go 语言 运算符

在编程语言中&#xff0c;运算符用于执行程序代码中的各种操作。它们可以分为多个类别&#xff0c;包括算术运算符、关系运算符和逻辑运算符等。下面我将为您简要介绍这些运算符的基本概念和用法。 算术运算符 算术运算符用于执行基本的数学运算&#xff0c;如加法、减法、乘…