LeetCode_33. Search in Rotated Sorted Array 在有一个转折的有序数组中查找某元素,二分法

题目:

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

Your algorithm's runtime complexity must be in the order of O(log n).

Example 1:

Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

Example 2:

Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1

 

代码:

class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        
        # 二分查找法
        left = 0                 #查找的下标
        right = len(nums) -1     #查找的上标
        
        while left <= right :
            mid = (left + right)/2
            if nums[mid] == target :
                return mid
            if nums[left] <=  nums[mid] :   #确定有顺序的部分:如果nums[left]                 if nums[left] <=  target <= nums[mid] :
                    right = mid -1
                else :
                    left = mid +1
            else :   #否则,mid到right部分的数据有序
                if nums[mid] <=  target <= nums[right] :
                    left = mid + 1
                else :
                    right = mid -1
        return -1

 

关键是确定有序的部分,通过左右两端的数据与中间数据比较,如果left的数据比mid的小,则left到mid是有序的;如果mid的数据比right的小,则mid到right的部分数据是有序的

你可能感兴趣的:(Leetcode)