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.
This paper uses the idea of binary algorithm, to determine whether the target is in the first half or the second half, and then separate search. Time: 7ms. The code is as follows:
classSolution { Public: intSearch (vector<int>& Nums,intFintLinttarget) { if(f>l)return-1; if(target = =Nums[f])returnF; if(target = =Nums[l])returnl; intMID = f + (L-F)/2; if(target = =Nums[mid])returnmid; if(Nums[f] = = Nums[l] && nums[f] = =Nums[mid]) { for(inti = f; i<l; i++){ if(Nums[i] = =target)returni; } return-1; } if(Nums[f] <target) { if(nums[f]<nums[mid]&&target>Nums[mid])returnSearch (Nums, Mid +1, L, Target); Else returnSearch (Nums, F, mid-1, Target); } Else if(nums[l]>target) { if(Nums[mid]<nums[l] && Target <Nums[mid])returnSearch (Nums, F, mid-1, Target); Else returnSearch (Nums, Mid +1, L, Target); } return-1; } intSearch (vector<int>& Nums,inttarget) { if(nums.size () = =0) return-1; returnSearch (Nums,0, Nums.size ()-1, Target); }};
[Leetcode] #34 Search in rotated Sorted Array