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;
}
}
};
leetcode Search in Rotated Sorted Array
最新推荐文章于 2024-10-14 18:52:56 发布