二分查找---有序数组的 Single Element
2024-08-24 20:01:39
有序数组的 Single Element
540. Single Element in a Sorted Array (Medium)
Input: [1, 1, 2, 3, 3, 4, 4, 8, 8]
Output: 2
题目描述:
一个有序数组只有一个数不出现两次,找出这个数。
思路分析:
要求在时间复杂度为O(lgn)内解出,因此不能遍历数组并进行异或操作进行求解,这么做的时间复杂度为O(n)。
令index为只出现一次数在数组中的下标,在index之后,数组中原来存在的成对状态被打破。如果m为偶数,并且m+1<index,那么nums[m]==nums[m+1]如果m+1>=index,那么nums[m]!=nums[m+1]。
从上面的规律知道,如果nums[m]==nums[m+1],那么index存在于[m+2,h],如果nums[m]!=nums[m+1],那么index存在于[l,m]。因为h的赋值表达式为h=m,那么循环条件也就只能使用了l<h这种形式。
代码
public int singleNonDuplicate(int []nums){
int l=0;
int h=nums.length-1;
while(l<h){
int m=l+(h-l)/2;
if(m%2==1)
m--; //保证l/h/m都在偶数位
if(nums[m]==nums[m+1]){
l=m+2;
}else{
h=m;
}
}
return nums[l];
}
最新文章
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】
- react初始(2)
- Python GUI 背景色与语法高亮主题配置
- xcode中使用xib添加autolayout中constrain to margins的不同
- Codeforces Round #130 (Div. 2) C. Police Station
- 连接Oracle错误:800a0e7a未找到提供程序的解决
- 完美解决 .txt文件在Mac上不能打开的问题
- hdu 3948 Portal (kusral+离线)
- vs 下 opengl 配置问题
- ruby编程语言-学习笔记4(第4章 表达式和操作符)
- 神经网络中误差反向传播(back propagation)算法的工作原理
- Css Div半透明
- 如何使用JAVA语言抓取某个网页中的邮箱地址
- javascript小数乘法精确率问题
- CSS实现三角形方法一--rotate+relative
- Java UDP Socket
- Struts2 设置global timer
- .Net上传文件大小配置
- /etc/fstab最后3个字段详解
- nginx日志的监控【转】
热门文章
- SpringCloud学习系列-Eureka服务注册与发现(3)
- [window] Pyhton轻便好用的spyder IDE如何去除E501 line too long提示
- CF543B Destroying Roads 枚举 + 思维 + BFS
- [USACO07OPEN]Dining 题解
- CF 546 B Soldier and Badges(贪心)
- Qt Creator 启动失败 可能的解决办法
- @ResponseBody返回4种数据格式的数据
- Model 层
- git使用,Git的skil-map,git配置http/https/socks5代理
- GMM demo