1. 程式人生 > >python -- leetcode ---- 81.Search in Rotated Sorted Array II

python -- leetcode ---- 81.Search in Rotated Sorted Array II

-81.Search in Rotated Sorted Array II

給定一個list,是由一個有序陣列在某一樞紐處旋轉得到的,並且其中可能含有重複元素,要求判斷target是否在這個list中.

雖然這個list經過旋轉,但是還是可以用二分查詢的思想,因為mid的左邊或右邊一定有一端是有序的.因此只需要在二分查詢的時候對此進行判斷就行了.另外本題可能有重複值,所以當left,mid和right指向的值都相等時要移動指標來跳出迴圈.

複製程式碼

class Solution:
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: bool
        """
        left = 0
        right = len(nums)-1

        while left <= right:
            mid = int((left + right) / 2)
            if nums[mid] == target:
                return True

            if nums[mid] < nums[right] or nums[mid] < nums[left]:
                if nums[mid] < target <= nums[right]:
                    left = mid + 1
                else:
                    right = mid - 1
            elif nums[mid] > nums[left] or nums[mid] > nums[right]:
                if nums[mid] > target >= nums[left]:
                    right = mid - 1
                else:
                    left = mid + 1
            else:
                left += 1

        return False