您的位置:首页 > 其它

LeeCode 540. Single Element in a Sorted Array

2017-11-11 23:34 483 查看
原题 :

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.

Example 1:

Input: [1,1,2,3,3,4,4,8,8]
Output: 2


Example 2:

Input: [3,3,7,7,10,11,11]
Output: 10


Note: Your solution should run in O(log n) time and O(1) space.

中文概要:

一个有序数组,除了某一个元素外其他元素出现2次,找出那个元素。要求时间O(logn)空间O(1)

题解 :

时间logn明显是二分,那么二分的判断条件是什么?

从第二个例子可以看出,位于偶数位上的数字,其下一个(奇数位)与其相同,直到10出现,其后面的偶数位与其上一个相同,我们可以利用

这点进行二分。

若mid 为偶数,则比较arr[mid] 和arr[mid+1],若相同,则目标在后半部,bengin = mid;否则end= mid

若mid 为奇数,则比较arr[mid] 和arr[mid-1],结论同上

上面第一个例子,begin = 0; end = 8,mid = 4, 4是偶数, arr[4] = 3,arr[5] = 4,偶数位与上一个相同,说明出现仅一次的元素已经出现,在前半部,

故令end = 4

第二轮,begin = 0, end = 4, mid = 2,2是偶数, arr[2] = 2, arr[3] = 3, 偶数位与下一个不同,在前半部,end= 2

第三轮, begin = 0,end = 2,mid = 1, 1是奇数, arr[1] = 1.arr[0] = 1 ,偶数位与下一个相同,在后半部, begin = 1;

此时begin= end-1;结束循环,进行最后判断。

若begin为奇数,比较arr[begin] 和arr[begin-1],相同 arr[end]为目标,否则arr[begin]为目标;

若begin为偶数,比较arr[begin] 和arr[begin+1],相同 arr[end]为目标,否则arr[begin]为目标;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeeCode