Leetcode每日一题2021/01/13+1

Leetcode每日一题2021/01/13+1_第1张图片

  • 这道题是153的扩展题,和昨天做的两道都是类似的,即一道题是元素唯一,一道是有重复元素。
    那么最重要的就是避免[1,1,1,1,1,1,0,1,1]和[1,1,0,1,1,1,1,1,1]这种情况发生,即nums[left] = nums[mid] = nums[right],不知道哪一部分是有序的,所以就有一个去重的工作。
class Solution:
    def findMin(self, nums: List[int]) -> int:
        left, right = 0, len(nums)-1
        while(left < right):
            mid = left + (right - left)//2
            if(nums[mid] > nums[right]):
                left = mid + 1
            elif(nums[mid] < nums[right]):
                right = mid
            else:  # nums[mid] == nums[right],排除1111111011这种情况;
                right -= 1
        return nums[left]

2

  • 代码里的去重工作就会影响算法效率,有可能变成了线性的,即时间复杂度为O(n),而不是二分法的O(log n)。

你可能感兴趣的:(Leetcode,算法,leetcode,python)