- Search in Rotated Sorted Array My Submissions QuestionEditorial Solution
Total Accepted: 102489 Total Submissions: 336829 Difficulty: Hard
Suppose a sorted array 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.
题意:分段有序数组查找指定值
思路和时间空间复杂度见下:
/*******************************************
分段有序,依然可以利用有序的性质
利用二分查找算法,只是每次确定目标值
所在区间时要多一点判断而已
时间复杂度:O(logn)
空间:O(1)
*********************************************/
class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size();
int beg = 0,end = n-1;
while(beg<end){
int mid = (beg+end)/2;
if(nums[mid]==target)return mid; //刚好找到返回
else if(nums[mid]<target){ //如果目标值大于中间值,则在比中间值大的区域找
if(nums[mid]>=nums[beg]) beg = mid+1;
else if(nums[mid]<nums[beg]){
if(nums[end]>=target)beg = mid+1;
else end = mid -1;
}
}
else if(nums[mid]>target){ //如果目标值小于中间值,则在比中间值小的区域找
if(nums[mid]>=nums[beg]){
if(nums[beg]<=target)end = mid-1;
else beg = mid+1;
}
else if(nums[mid]<nums[beg])end = mid-1;
}
}
if(beg==end&&nums[beg]==target)return beg;
else return -1;
}
};