搜索旋转排序数组——好久没有刷题了,核心是分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