Single Element in a Sorted Array

此题要求时间复杂度O(lgn),想了半天只想出来一个分治的算法,但是空间还是无法O(1)

class Solution(object):
    def singleNonDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        start, end = 0, len(nums)
        return self.helper(nums, start, end)[1]

    def helper(self, nums, start, end):
        if start == end - 1:
            return (True, nums[start])
        if start == end - 2:
            return (False, -1)
        mid = start + (end - start) / 2
        if nums[mid] == nums[mid - 1]:
            left = self.helper(nums, start, mid + 1)
            right = self.helper(nums, mid + 1, end)
            if left[0] or right[0]:
                return (True, left[1]) if left[0] else (True, right[1])
            return (False, -1)
        elif nums[mid] == nums[mid + 1]:
            left = self.helper(nums, start, mid)
            right = self.helper(nums, mid, end)
            if left[0] or right[0]:
                return (True, left[1]) if left[0] else (True, right[1])
            return (False, -1)
        else:
            return (True, nums[mid])

此题的二分解法很有趣,三刷继续研究

results matching ""

    No results matching ""