leetcode Search in Rotated Sorted Array

来源:互联网 发布:自己设计房子软件 编辑:程序博客网 时间:2024/06/08 00:37
class Solution {public:    int search(vector<int>& nums, int target) {        if (nums.size()==0) return -1;        if (nums.size()==1) return (nums[0]==target)-1;        int p = findPivot(nums);        int p_low  = p;        int mid;        int true_mid;        int p_high = p-1+nums.size();        while (p_low<=p_high){            mid = (p_low+(p_high-p_low)/2);            true_mid = mid%nums.size();            if (nums[true_mid]>target) p_high=mid-1;            else if (nums[true_mid]<target) p_low=mid+1;            else return true_mid;        }        return -1;    }public:    int findPivot(vector<int>& nums) const {    // assert nums.size()>1        int a=0;        int b=nums.size()-1;        if (nums[b]>nums[a]) return 0;        else{            while(nums[b-1]<nums[b]){                int m = (a+b)/2;                if (nums[a]>nums[m]) b = m;                else a = m;            }            return b;        }    }};
0 0
原创粉丝点击