class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size(), l = 0, r = n-1, mid;
while(l <= r){
mid = l + (r-l)/2;
if(nums[mid] == target) return mid;
if(nums[mid] < nums[r]){
if(nums[mid] < target && target <= nums[r])
l = mid+1;
else
r = mid-1;
}
else{
if(nums[l] <= target && target < nums[mid])
r = mid-1;
else
l = mid+1;
}
}
return -1;
}
};
class Solution {
public:
bool search(vector<int>& nums, int target) {
int n = nums.size(), l = 0, r = n-1, mid;
while(l <= r){
mid = l + (r-l)/2;
if(nums[mid] == target) return true;
if(nums[l] < nums[mid] || nums[r] < nums[mid]){
if(nums[l] <= target && target < nums[mid])
r = mid-1;
else
l = mid+1;
}
else if(nums[l] > nums[mid] || nums[r] > nums[mid]){
if(nums[mid] < target && target <= nums[r])
l = mid+1;
else
r = mid-1;
}
else l++;
}
return false;
}
};
class Solution {
public:
int findMin(vector<int>& nums) {
int n = nums.size(), l = 0, r = n-1, mid;
if(n && nums[l] <= nums[r]) return nums[l]; // 为后面的条件设置埋下伏笔
while(l <= r){
mid = l + (r-l)/2;
if(nums[mid] > nums[mid+1]) return nums[mid+1]; // 为什么不是if(nums[mid]<nums[mid-1])?参考[2,1]的情况
if(nums[mid] < nums[r]) r = mid; // 为什么不是 r = mid+1?
else l = mid; // 为什么不是 l = mid-1?
}
return 0;
}
};