leetcode 33. Search in Rotated Sorted Array

来源:互联网 发布:java agent 技术 编辑:程序博客网 时间:2024/06/06 04:47

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;    }};
原创粉丝点击