码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 33. Search in Rotated Sorted Array_Medium tag: Binary Search

时间:2019-04-16 10:38:18      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:pos   ted   put   pre   exist   左移   dup   time   out   

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

1) 这个题目思路就是先画图, 分区间讨论,注意是左移还是右移,最好画图判断下。

2)可以利用[LeetCode] 153. Find Minimum in Rotated Sorted Array_Medium tag: Binary Search 的思路,通过lg n 找到转折点,然后分别在两段里面找。

T: O(lgn)

Code

1)

class Solution:
    def search(self, nums, target):
        if not nums: return -1
        S, E, l, r = nums[0], nums[-1], 0, len(nums) - 1
        while l + 1 < r:
            mid = l + (r - l)//2
            if target == nums[mid]: return mid
            if nums[mid] >= S:
                if S <= target <= nums[mid]:
                    r = mid
                else:
                    l = mid
            else:
                if nums[mid] <= target <= E:
                    l = mid
                else:
                    r = mid
        if nums[l] == target: return l
        if nums[r] == target: return r
        return -1

 

[LeetCode] 33. Search in Rotated Sorted Array_Medium tag: Binary Search

标签:pos   ted   put   pre   exist   左移   dup   time   out   

原文地址:https://www.cnblogs.com/Johnsonxiong/p/10715364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!