LeetCode 33. Search in Rotated Sorted Array

来源:互联网 发布:法尔曼怎么样 知乎 编辑:程序博客网 时间:2024/06/02 18:01

题目链接 33. Search in Rotated Sorted Array

题意

假设一个按升序排序的数组,在你事先未知的某个旋转点旋转。
例如(0,1,5,6,7,可能成为4,6,7,0,1 2)。
给你一个搜索的目标值。如果在数组中找到返回它的索引,否则返回- 1。
您可以假定数组中不存在重复元素。

思路

使用二分法,使用恰当条件收缩搜索范围并保证循环可以退出,最终判断是否找到解。

代码

class Solution(object):    def search(self, nums, target):        """        :type nums: List[int]        :type target: int        :rtype: int        """        l, r = 0, len(nums) - 1        while l < r:            m = l + ((r - l) >> 1)            if nums[m] <= nums[r]:                if nums[m] < target <= nums[r]:                    l = m + 1                else:                    r = m            else:                if nums[l] <= target <= nums[m]:                    r = m                else:                    l = m + 1        return l if nums[l] == target else -1
0 0
原创粉丝点击