540. 有序数组中的单一元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution:
def singleNonDuplicate(self, nums: List[int]) -> int:
left = 0
right = len(nums)-1
while left<=right:
mid = (left+right)>>1
# if mid % 2 == 1:
# if mid<1 or nums[mid] != nums[mid-1]:
# right = mid-1
# else:
# left = mid+1
# else:
# if mid+1>=len(nums) or nums[mid] != nums[mid+1]:
# right = mid-1
# else:
# left = mid+1
# 以上写法太啰嗦,用异或门操作 ^ 1,可以使 偶数都+1 奇数都-1。两头的索引一定是偶数。
if mid^1>len(nums)-1 or mid^1<0 or nums[mid] != nums[mid^1]:
right = mid-1
else:
left = mid+1
return nums[left]