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.
#include<vector>
#include<iostream>
using namespace std;
class Solution {
public:
int search(vector<int>& nums, int target) {
int n=nums.size();
if(n==0) return -1;
int left=0,right=n-1,m=0;
while(left<=right){
m=(left+right)/2;
if(nums[m]==target){return m;}
if(nums[left]>nums[right]){
if(nums[m]<nums[right]){
if((nums[m]<target)&&(target<=nums[right])){
left=m+1;
}else{
right=m-1;
}
}else{
if((nums[m]>target)&&(target>=nums[left])){
right=m-1;
}else{
left=m+1;
}
}
}
else{
if(target<nums[m]){
right=m-1;
}else{
left=m+1;
}
}
}
return -1;
}
};
void main(){
int a[9]={4,5,6,7,8,9,0,1,2},n=9;
vector<int> nums(n);
nums.reserve(n);
nums.assign(&a[0],&a[n]);
Solution So;
int res=So.search(nums,5);
cout<<res<<endl;
}