【Leetcode】二分法
153. 寻找旋转排序数组中的最小值
输入:[3,4,5,1,2]
输出:1
class Solution {
public:
//二分法
int minArray(vector<int>& numbers) {
int low = 0;
int high = numbers.size() - 1;
while (low < high) {
int pivot = low + (high - low) / 2;
if (numbers[pivot] < numbers[high]) {
high = pivot;
}
else if (numbers[pivot] > numbers[high]) {
low = pivot + 1;
}
else {
high -= 1; //因为有重复的值 收缩high
}
}
return numbers[low];
}
};
33. 搜索旋转排序数组
class Solution {
public:
int search(vector<int>& nums, int target) {
int len = nums.size();
int left = 0, right = len-1;
while(left<=right){
int mid = left+(right-left)/2;
if(nums[mid] == target) return mid;
if(nums[left]<=nums[mid]) //mid 左边有序
{
if(target>=nums[left] and target<nums[mid]){
right = mid-1;
}
else{
left = mid+1;
}
}
else{ //mid 右边有序
if(target>nums[mid] and target<=nums[right]){
left = mid+1;
}
else{
right = mid-1;
}
}
}
return -1;
}
};