LeetCode個人筆記python篇(hard)

154. 尋找旋轉排序數組中的最小值 II

這題是153的延伸,區別就是允許重複數字的出現。因此增加了一個當first = mid = last時,按順序查找最小值。(此題特別注意是各種等號要加進去,不然就會判斷錯誤)

class Solution(object):
    def findMin(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        first = 0
        last = len(nums) - 1
        flag = 0
        while nums[first] >= nums[last]:
            flag = 1
            if last - first == 1:
                mid = last
                break
            mid = (first + last)//2
            if nums[first] == nums[mid] and nums[mid] == nums[last]:
                return self.inorderNum(nums,first,last)
            if nums[mid] >= nums[first]:
                first = mid
            elif nums[mid] <= nums[first]:
                last = mid
        print(flag)
        if flag == 0:
            return nums[0]
        else:
            return nums[mid]
    def inorderNum(self,nums,first,last):
        result = nums[first]
        for i in range(first+1,last+1):
            if result > nums[i]:
                result = nums[i]
        return result

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章