Search in Rotated Sorted Array

来源:互联网 发布:js清空select选中的值 编辑:程序博客网 时间:2024/06/03 17:58

题目:

Suppose a sorted array 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.

解题思路:

初始有序的数组被翻转后,其中的任何位置的元素都仍然属于一个有序的子序列,这个有序的子序列不是在左边有序,就是右边有序,当然也可能都有序。

因此讨论mid位于左右那一部分有序数组中,然后再讨论有序部分与无序部分的情况,便可以解决此题。此题难点就在很容易把有序分区搞错。



class Solution(object):
    def search(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        lo, hi = 0, len(nums)-1
        while lo<=hi:
            mid = (lo+hi)/2
            if nums[mid]==target:
                return mid
            if nums[mid]>=nums[lo]:   # lo~mid是有序的
                if nums[lo]<=target and target<=nums[mid]:   # target位于lo和mid之间
                    hi = mid-1
                else:   # target不位于lo和mid之间
                    lo = mid+1
            elif nums[mid]<=nums[hi]:   # mid和hi是有序的
                if nums[mid]<=target and target<=nums[hi]:   # target位于mid和hi之间
                    lo = mid+1
                else:    # target不位于mid和hi之间
                    hi = mid-1
        return -1

0 0
原创粉丝点击