您的位置:首页 > 其它

81. Search in Rotated Sorted Array II

2018-01-15 18:24 211 查看
和33. Search
in Rotated Sorted Array一样。直接上代码

class Solution {

    public:

        bool search(vector<int>& nums, int target) {

       

       

        if(nums.size()<1) return false;

        if(nums.size()<=6){

            for(int i=0;i<nums.size();i++){

                if(nums[i]==target){

                    return true;

                }

            }

            return false;

        }

        int re =0;

        re = thirdSearchPos(nums,0,nums.size() - 1,target);

        if(re == -1) return false;

            return true;

    }

    

    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;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息