leetcode 33. Search in Rotated Sorted Array
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.size()<1) return -1;
if(nums.size()<=6){
for(int i=0;i<nums.size();i++){
if(nums[i]==target){
return i;
}
}
}
int re =0;
re = thirdSearchPos(nums,0,nums.size() - 1,target);
return re;
}
int thirdSearchPos(vector<int>& nums,int left, int right,int target) {
if(right - left<=6){
for(int i=0;i<nums.size();i++){
if(nums[i]==target){
return i;
}
}
return -1;
}
int firstThird = left + (right - left)/3;
int secondThird = firstThird + (right - left)/3;
if(target==nums[left]) return left;
if(target==nums[firstThird]) return firstThird;
if(target==nums[secondThird]) return secondThird;
if(target==nums[right]) return right;
int re = -1;
if(nums[left]<=nums[firstThird] && target>nums[left] && target<nums[firstThird]){
re = binarySearchPos(nums,left,firstThird,target);
}else if(target>nums[left] && target<nums[firstThird]){
re = thirdSearchPos(nums,left,firstThird,target);
}
if(re!=-1) return re;
if(nums[secondThird]<=nums[right] && target>nums[secondThird] && target<nums[right]){
re = binarySearchPos(nums,secondThird,right,target);
}else if(target>nums[secondThird] && target<nums[right]){
re = thirdSearchPos(nums,secondThird,right, target);
}
if(re!=-1) return re;
return thirdSearchPos(nums,firstThird,secondThird, target);
}
int binarySearchPos(vector<int>& nums1, int start, int end, int num) {
int left = start, right = end, medium = 0;
while (left<right) {
medium = left + (right - left) / 2;
if (nums1[medium] - num >0) {
right = medium;
}
else if (num - nums1[medium] >0) {
left = medium + 1;
}
else {
return medium;
}
}
int left1 = -1;
if (nums1[left] == num)
left1 = left;
return left1;
}
};