搜索旋转排序数组——好久没有刷题了,核心是分3段处理,最前的升序段,最后的升序段,需要利用A[0],A[-1],A[mid]和target关系。
62. 搜索旋转排序数组
中文
English
假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。你可以假设数组中不存在重复的元素。
样例
例1:
输入: [4, 5, 1, 2, 3] and target=1,
输出: 2.
例2:
输入: [4, 5, 1, 2, 3] and target=0,
输出: -1.
挑战
O(logN) 时间限制
class Solution:
"""
@param A: an integer rotated sorted array
@param target: an integer to be searched
@return: an integer
"""
def search(self, A, target):
# write your code here
if not A:
return -1
l,r = 0,len(A)-1
while l+1 < r:
mid = (l+r) >> 1
if A[0] < A[mid]:
if A[0] <= target <= A[mid]:
r = mid
else:
l = mid
else:
if A[mid] <= target <= A[-1]:
l = mid
else:
r = mid
if A[l] == target:
return l
if A[r] == target:
return r
return -1

浙公网安备 33010602011771号