https://leetcode.com/problems/single-element-in-a-sorted-array/
- 有序数组查找问题,一般想到二分。和邻居比较来判断位于左右哪边.
- 单独出现的元素其左边有偶数个元素,因此其下标index 为偶数
- mid为偶数,如果 mid与mid+1值相等,则l=mid+2; 如果mid与mid+1不等,则r=mid
- mid为奇数,mid-1变为偶数
class Solution:
def singleNonDuplicate(self, nums: List[int]) -> int:
l = 0
r = len(nums) - 1
while l < r:
mid = l + (r - l) // 2
if mid % 2 == 1:
mid -= 1
if nums[mid] == nums[mid+1]:
l = mid + 2
else:
r = mid
return nums[l]
时间复杂度:O(log(n))
空间复杂度:O(1)