https://leetcode-cn.com/problems/search-in-rotated-sorted-array/
查找特定数字,无重复数字
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = (int)nums.size()-1;
while (left<=right)
{
int mid = left+((right-left)>>1);
if (nums[mid] == target) return mid;
if (nums[left]<=nums[mid])
{
if (nums[left]<=target && target < nums[mid])
{
right = mid-1;
}
else
{
left = mid+1;
}
}
else
{
if (nums[mid]<target && target <= nums[right])
{
left = mid+1;
}
else
{
right = mid-1;
}
}
}
return -1;
}
};
https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/
查找特定数字,有重复数字
class Solution {
public:
bool search(vector<int>& nums, int target) {
int left = 0;
int right = (int)nums.size()-1;
while (left<=right)
{
int mid = left+((right-left)>>1);
if (nums[mid] == target) return true;
if (nums[left]<nums[mid])
{
if (nums[left]<=target && target < nums[mid])
{
right = mid-1;
}
else
{
left = mid+1;
}
}
else if (nums[left] == nums[mid])
{
++left;
}
else
{
if (nums[mid]<target && target <= nums[right])
{
left = mid+1;
}
else
{
right = mid-1;
}
}
}
return false;
}
};
https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/
查找最小值,无重复
class Solution {
public:
int findMin(vector<int>& nums) {
int left = 0;
int right = (int)nums.size()-1;
while(left < right)
{
int mid = ((right-left)>>1) + left;
if (nums[mid] > nums[right])
{
left = mid+1;
}
else
{
right = mid;
}
}
return nums[left];
}
};
https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/
查找最小值,有重复
class Solution {
public:
int findMin(vector<int>& nums) {
int left = 0;
int right = (int)nums.size()-1;
while(left < right)
{
int mid = ((right-left)>>1) + left;
if (nums[mid] > nums[right])
{
left = mid+1;
}
else if (nums[mid] < nums[right])
{
right = mid;
}
else
{
--right;
}
}
return nums[left];
}
};