540. Single Element in a Sorted Array

https://leetcode.com/problems/single-element-in-a-sorted-array/

solution

  • 有序数组查找问题,一般想到二分。和邻居比较来判断位于左右哪边.

  • 单独出现的元素其左边有偶数个元素,因此其下标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)

Last updated