搜索旋转排序数组
搜索旋转排序数组 II
class Solution {
public:
bool search(vector<int>& nums, int target) {
int len = nums.size();
int low = 0;
int high = len - 1;
int mid;
while (low <= high)
{
while (low < high&&nums[low] == nums[low + 1])
++low;
while (low < high&&nums[high] == nums[high - 1])
--high;
mid = (low + high) / 2;
if (nums[mid] == target)
return true;
if (nums[mid] > nums[high])//递增数组在前面
{
if (nums[low] <= target&&target < nums[mid])
high = mid-1;
else
low = mid + 1;
}
else//递增数组在后面
{
if (nums[mid] < target&&target <= nums[high])
low = mid + 1;
else
high = mid-1;
}
}
return false;
}
};
寻找旋转排序数组中的最小值 II
class Solution {
public:
int findMin(vector<int>& nums) {
//使用的是while消除重复字符
int len=nums.size();
int low=0;
int high=len-1;
int mid;
while(low<high)
{
while(low<high&&nums[low]==nums[low+1])
++low;
while(low<high&&nums[high]==nums[high-1])
--high;
mid=(low+high)/2;
if(nums[mid]>nums[high])
low=mid+1;
else
high=mid;
}
return nums[low];
}
};