LeetCode 540. Single Element in a Sorted Array

题目

You are given a sorted array consisting of only integers where every element appears exactly twice, except for one element which appears exactly once. Find this single element that appears only once.

Example 1:

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

Example 2:

1
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.

思路

sorted array + O(log n) time == 二分查找…
可以记一些常用的代替算术运算符的操作:

  • (l+r)/2 ==> (l+r)>>1
  • l%2 == 1 ==> l&1 == 1

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution(object):
def singleNonDuplicate(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
l, r = 0, len(nums)-1
while l < r:
mid = (l+r)>>1
if nums[mid] == nums[mid-1]:
if (mid-1) & 1:
r = mid-2
else:
l = mid+1
elif nums[mid] == nums[mid+1]:
if mid & 1:
r = mid-1
else:
l = mid+2
else:
return nums[mid]
return nums[l]