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
和剑指offer不一样,那个题是找最小值,而且加难度的地方是这个数组是不递减的
其实自己的思路对,但是逻辑混乱导致WA
想着如果mid在左边,target在l mid中间就是r=m-1 反之l=m+1
如果mid在右边,target在mid r中间就是l=m+1 反之r=m-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)/2
if(nums[m]==target):
return m
if(nums[l]<=nums[m]):
if(target<=nums[m] and target>=nums[l]):
r=m-1
else:
l=m+1
else:
if(target>=nums[m] and target<=nums[r]):
l=m+1
else:
r=m-1
return -1