题目: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. Keep It Simple

    The KISS principle, or Keep It Simple, Stupid, spans many trades, industries, and professions. The m ...

  2. 音频编辑器 OcenAudio v3.1.9.0 绿色便携版

    下载地址:点我 基本介绍 ocenaudio是一款跨平台的,易于使用的,快速的,功能强大的,好用的音频编辑软件.该软件支持Virtual Studio Technology插件,美观.统一的跨平台界面 ...

  3. 常见Code Review过程中发现的问题

    软件环境:Spring MVC + MyBatis 主要体现在两个方面,一个是编码习惯问题,另一个是编码质量的问题.编码习惯主要有日志编写.代码注释以及编码风格的问题,而编码质量则与很多方面相关,比如 ...

  4. PG利用Multicorn访问CSV外部数据源

    Multicorn 是一个 PostgreSQL 9.1+ 的扩展模块,用于简化外部数据封装开发,允许开发者使用 Python 编程语言开发. Install Multicorn Requiremen ...

  5. 掌握简单的Makefile文件编程

    Makefile描述整个程序的编译.链接规则 其中还包括了工程中用到的那些源文件及需要产生的目标文件 1)Makefile编程规则 目标(唯一):依赖(可多个) 命令... 伪目标 .PHONY:cl ...

  6. leetcode 198. House Robber (Easy)

    https://leetcode.com/problems/house-robber/ 题意: 一维数组,相加不相邻的数组,返回最大的结果. 思路: 一开始思路就是DP,用一维数组保存dp[i]保存如 ...

  7. [sublime3] 在linux下的终端中使用sublime3打开文件

    通过ln命令创建软连接实现 echo $PATH 查看路径 例 我的路径是: /home/rh/anaconda3/bin:/home/rh/bin:/home/rh/.local/bin:/usr/ ...

  8. Java EE API

    百度云:链接:http://pan.baidu.com/s/1nvTlMLb     密码:vulq 官方下载网址:http://www.oracle.com/technetwork/java/jav ...

  9. JQuery操作CheckBox 第二次无法选中的问题

    用JQuery做CheckBox全选和反选的时候,遇到一个问题.当用JQ控制全选,全取消一次以后,再次点击全选,发现代码变了,但是CheckBox没有处于选中状态. 百度后得知: 我使用的方法是 $( ...

  10. Pinyin4j简单使用教程

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换,拼音输出格式可以定制,在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,这时候Pinyin4j就可以派上用场 有自己私服的可以 ...