Leetcode题解-33. Search in Rotated Sorted Array
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.
题意
一个n个数的递增序列,循环右移k位(K不知道)产生一个新的序列,在新的序列中查找一个数value,value在序列中返回value的位置(从0计数),否则返回-1
思路
循环右移k位使得原来的递增序列变成[0,k]、[k+1,n-1]上的两个递增序列,array[k]>array[k+1]。如果能确认k则可以直接进行二分查找,问题是k不知道。
设序列中间位置为mid,若array[mid]>array[n-1],则在[0,mid]上的数是递增的;若array[mid]
代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int l = 0, r = nums.size() - 1;//l表示二分区间的左边域,r表示右边域
while(l <= r){
int mid = (l + r) / 2;
if(l == r && nums[l] != target) return -1;
if(nums[mid] == target) return mid;
else if(nums[mid] < nums[r]){//右边子序列递增
//在右边子序列中查找的情况
if(nums[mid] < target && target <= nums[r]) l = mid + 1;
else r = mid - 1;
}
else if(nums[mid] > nums[r]){//左边子序列递增
//在左边子序列中查找的情况
if(nums[mid] > target && target >= nums[l]) r = mid - 1;
else l = mid + 1;
}
}
return -1;
}
};