题解 | #在转动过的有序数组中寻找目标值#
在转动过的有序数组中寻找目标值
http://www.nowcoder.com/practice/7cd13986c79d4d3a8d928d490db5d707
找到数组中间,如果数组中间的数小于数组首位 那么左边有序,数组中间的数小于数组末尾 那么右边有序
继续二分即可
class Solution:
def search(self , nums , target ):
# write code here
if not nums:
return -1
l,r=0,len(nums)-1
while l<=r:
mid=(l+r)//2
if nums[mid]==target:
return mid
if(nums[0]<=nums[mid]):
if(target>=nums[0] and target<nums[mid]):
r=mid-1
else:
l=mid+1
else:
if(target>nums[mid] and target<nums[len(nums)-1]):
l=mid+1
else:
r=mid-1
return -1

查看7道真题和解析