Leetcode刷題記錄 81. 搜索旋轉排序數組 II

假設按照升序排序的數組在預先未知的某個點上進行了旋轉。

( 例如,數組 [0,0,1,2,2,5,6] 可能變爲 [2,5,6,0,0,1,2] )。

編寫一個函數來判斷給定的目標值是否存在於數組中。若存在返回 true,否則返回 false。

示例 1:

輸入: nums = [2,5,6,0,0,1,2], target = 0
輸出: true
示例 2:

輸入: nums = [2,5,6,0,0,1,2], target = 3
輸出: false
進階:

這是 搜索旋轉排序數組 的延伸題目,本題中的 nums  可能包含重複元素。
這會影響到程序的時間複雜度嗎?會有怎樣的影響,爲什麼?

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii
 

class Solution:
    def search(self, nums: [int], target: int) -> bool:
        length = len(nums)
        start = 0
        end = length-1  # [start, end]
        while start<=end:
            mid = (start+end)//2
            # found
            if nums[mid]==target:
                return True
            # case 1
            if nums[start]==nums[mid]==nums[end]:
                start +=1
                end -=1
            # case 2
            elif nums[start]<=nums[mid]:
                if target>=nums[start] and target<=nums[mid]:
                    end = mid -1 
                else:
                    start = mid+1 
            # case 3
            else:
                if target>nums[mid] and target<=nums[end]:
                    start = mid+1
                else:
                    end = mid-1
        return False

if __name__=="__main__":
    print(Solution().search([1,3,1,1,1],3))
    print(Solution().search([3,1,1],3))
    print(Solution().search([2,5,6,0,0,1,2],3))

 

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