题目:Given a sorted array consisting of only integers where every element appears twice except for one element which appears once. Find this single element that appears only once.

大意:给定一个已排序、全是整数int、每个元素出现两次(除了单独出现一次的元素)的数组,找到这个单独的元素。

例1:

Input: [,,,,,,,,]
Output:

例2:

Input: [,,,,,,]
Output:

要求:时间复杂度为O(log n)空间复杂度为 O(1) 。

这是一个查找特定元素的题,要求时间复杂度是O(log n),所以其实基本就提示使用二分查找吧,二分查找的原理就是把数组分为均等的两个部分a、b,判断想要寻找的元素在a、还是b,如果在a就再把a分为两半,再进行判断,直到查找成功。

public static int rank(int[] nums ,int key){
int start = 0;
int end = nums.length - 1;
while (start < end){
int mid = start + (end - start) / 2;
if(nums[mid] < key){
//在右半部分
start = mid + 1;
}else if(nums[mid] > key) {
//在左半部分
end = mid - 1;
}else {
return nums[mid];
}
}
return nums[start];
}

这是是使用二分查找查找排序好的数组的一个方法,通过对比nums[mid]和key的大小不断缩小查找的范围,直到查找成功为止。我们要修改的就是缩小范围的方法。

我把数组的索引分为偶数和奇数,从0开始是偶数,1是奇数,数组nums[1,1,2,2,3,4,4,5,5]是这样的

数组中单独出现的元素是3,我们可以观察到的规律有,在单个元素出现之前nums[偶数]的右边也就是下一个元素是和它相等的,nums[奇数]的左边也就是上一个元素是和它相等的,也可以解释为:一组相等的数的索引开始时是 偶奇、偶奇、偶奇、当出现一个单独的元素时就打破了这个规律,变成了偶奇、偶奇、偶奇、偶、奇偶、奇偶、奇偶。

所以我们得到答案,设索引为a,如果a为偶数且和它的下一个数是相等的则单独的数出现在索引a之后,如果a为奇数且和它的上一个数是相等的则单独的数出现在索引a之后。所以代码就是:

public static int singleNonDuplicate(int[] nums) {
int start = 0;
int end = nums.length - 1;
while(start < end){
int mid = start + (end - start) /2;
if(mid%2 != 0 && mid - 1 >= 0 && nums[mid] == nums[mid - 1] ||
mid%2 == 0 && mid + 1 < nums.length && nums[mid] == nums[mid + 1] ){
start = mid + 1;
}else{
end = mid - 1;
}
}
return nums[start];
}

LeetCode——540. Single Element in a Sorted Array的更多相关文章

  1. LeetCode - 540. Single Element in a Sorted Array

    Given a sorted array consisting of only integers where every element appears twice except for one el ...

  2. 【LeetCode】540. Single Element in a Sorted Array 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 方法一:异或 方法二:判断相邻元素是否相等 方法三:二分查找 ...

  3. 【leetcode】540. Single Element in a Sorted Array

    题目如下: 解题思路:题目要求时间复杂度是O(logN),可以尝试使用二分查找法.首先数组是有序的,而且仅有一个元素出现一次,其余均为两次.我们可以先找到数组最中间的元素,记为mid.如果mid和mi ...

  4. 540 Single Element in a Sorted Array 有序数组中的单一元素

    给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数.示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2 示例 2:输入: [3,3,7,7,10,1 ...

  5. 540. Single Element in a Sorted Array

    题目大意: 给你一个由小到大排好序的数组,里面只有一个数出现了一次,其他数都出现了两次,要求找出那个只出现一次的数,而且时间复杂度为O(logn) 题目思路: 说实话一开始没想到,因为几乎每个数都出现 ...

  6. LeetCode 540. 有序数组中的单一元素(Single Element in a Sorted Array) 42

    540. 有序数组中的单一元素 540. Single Element in a Sorted Array 题目描述 每日一算法2019/6/14Day 42LeetCode540. Single E ...

  7. [LeetCode] Single Element in a Sorted Array 有序数组中的单独元素

    Given a sorted array consisting of only integers where every element appears twice except for one el ...

  8. LeetCode——Single Element in a Sorted Array

    Question Given a sorted array consisting of only integers where every element appears twice except f ...

  9. [Swift]LeetCode540. 有序数组中的单一元素 | Single Element in a Sorted Array

    Given a sorted array consisting of only integers where every element appears twice except for one el ...

随机推荐

  1. exgcd、二元一次不定方程学习笔记

    (不会LATEX,只好用Word) ( QwQ数论好难) 再补充一点,单次询问a,b求逆元的题可以直接化简然后套用exgcd求解. 例题:https://www.luogu.org/problemne ...

  2. Excel催化剂开源第5波-任务窗格在OFFICE2013中新建文档不能同步显示问题解决

    在OFFICE2013及之后,使用了单文档界面技术,不同于以往版本可以共享任务空格.功能区.所以当开发任务窗格时,需要考虑到每一个工作薄都关联一个任务窗格. 背景介绍 单文档界面摘录官方定义如下:对 ...

  3. BeautifulSoup库整理

    BeautifulSoup库 一.BeautifulSoup库的下载以及使用 1.下载 pip3 install beautifulsoup4 2.使用 improt bs4 二.BeautifulS ...

  4. [剑指offer] 23. 二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 思路: 解法一:递归 二叉搜索树,后序遍历的数组中 ...

  5. LiteDB源码解析系列(4)跳表基本原理

    LitDB里面索引的数据结构是用跳表来实现的,我知道的开源项目中使用跳表的还包括Redis,大家可以上网搜索关于Redis的跳表功能的实现.在这一章,我将结合LiteDB中的示例来讲解跳表. 1.跳表 ...

  6. python函数对象-命名空间-作用域-02

    函数对象 函数是第一对象: # 函数名指向的值可以被当做参数传递 函数对象的特性(*****灵活运用,后面讲装饰器会用到) 函数名可以像变量一样被传递 # 变量可以被传递 name = 'jason' ...

  7. python中的元类(metaclass)

    认识python中元类的准备工作. 1,首先需要明白一个概念就是python中一切皆为对象. input: class Trick(object): pass ') print type(1234) ...

  8. Go组件学习——cron定时器

    1 前言 转到Go已经将近三个月,写业务代码又找到了属于Go的条件反射了. 后置声明和多参数返回这些Go风格代码写起来也不会那么蹩脚,甚至还有点小适应~ 反而,前几天在写Java的时候,发现Java怎 ...

  9. Jsp机试题 (用户登录用户注册/用户注销功能)

    1. 用户登录 实现用户登录,功能,三个页面登录页面login.jsp,登录逻辑处理页面loginSubmit.jsp,欢迎页面welcome.jsp.用户再登录页面输入用户名和密码,前台页面使用js ...

  10. HTTP_2_HTTP协议概要

    http协议概要 HTTP 通信对象 通信方式 通信状态 定位资源 节省通信量 超文本传输协议 客户端与服务器端 请求和响应 不保存状态(借助cookie) 请求URI keep-alive/pipe ...