题目:
假设按照升序排序的数组在预先未知的某个关键点上旋转。
(即 0 1 2 4 5 6 7
将变成 4 5 6 7 0 1 2
)。
给你一个目标值来搜索,如果数组中存在这个数则返回它的索引,否则返回 -1。
你可以假设数组中不存在重复。
分析:
代码:
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if not nums:
return -1
l = 0
r = len(nums) - 1
while l < r:
if r - l == 1:
if target in nums:
return nums.index(target)
else:
return -1
mid = (l + r) // 2
# print "l:%d,mid:%d,r:%d"%(l,mid,r)
if nums[mid] == target:
return mid
if target > nums[mid]:
if nums[r] < nums[mid]:
l = mid + 1
else:
if target > nums[r]:
r = mid -1
else:
l = mid + 1
else:
if nums[mid] > nums[l]:
if target < nums[l]:
l = mid + 1
else:
r = mid -1
else:
r = mid - 1
# print 'r:%d' % r
if nums[r] == target:
return r
return -1
思考: