有序数组的 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];
}

最新文章

  1. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】
  2. react初始(2)
  3. Python GUI 背景色与语法高亮主题配置
  4. xcode中使用xib添加autolayout中constrain to margins的不同
  5. Codeforces Round #130 (Div. 2) C. Police Station
  6. 连接Oracle错误:800a0e7a未找到提供程序的解决
  7. 完美解决 .txt文件在Mac上不能打开的问题
  8. hdu 3948 Portal (kusral+离线)
  9. vs 下 opengl 配置问题
  10. ruby编程语言-学习笔记4(第4章 表达式和操作符)
  11. 神经网络中误差反向传播(back propagation)算法的工作原理
  12. Css Div半透明
  13. 如何使用JAVA语言抓取某个网页中的邮箱地址
  14. javascript小数乘法精确率问题
  15. CSS实现三角形方法一--rotate+relative
  16. Java UDP Socket
  17. Struts2 设置global timer
  18. .Net上传文件大小配置
  19. /etc/fstab最后3个字段详解
  20. nginx日志的监控【转】

热门文章

  1. SpringCloud学习系列-Eureka服务注册与发现(3)
  2. [window] Pyhton轻便好用的spyder IDE如何去除E501 line too long提示
  3. CF543B Destroying Roads 枚举 + 思维 + BFS
  4. [USACO07OPEN]Dining 题解
  5. CF 546 B Soldier and Badges(贪心)
  6. Qt Creator 启动失败 可能的解决办法
  7. @ResponseBody返回4种数据格式的数据
  8. Model 层
  9. git使用,Git的skil-map,git配置http/https/socks5代理
  10. GMM demo