Suppose a sorted array is rotated on 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 is given a target value to search. If found in the array is return its index, otherwise return-1.
Assume no duplicate exists in the array.
The idea of using two-point search.
intBinary_search (vector<int>& Nums,intLeftintRightinttarget) { if(Left >Right )return-1; while(Left <=Right ) { intMid = (left+right) >>1; if(Nums[mid] = =target)returnmid; Else if(Nums[mid] <target) left= mid+1; Else Right= mid-1; } return-1;}intSearch (vector<int>& Nums,inttarget) { intn = nums.size (), left =0, right = N1, Mid; if(left = right && nums[0] ==target)return 0; while(Left <=Right ) {Mid= (left+right) >>1; if(target = =Nums[mid])returnmid; if(Nums[left] <=Nums[mid]) { if(Target >= Nums[left] && target <=Nums[mid])returnBinary_search (Nums, left, Mid, Target); Left= mid+1; } Else { if(Target >= Nums[mid] && target <=Nums[right])returnBinary_search (Nums, Mid, right, target); Right= mid-1; } } return-1;}
Search in rotated Sorted Array *hard*