剑指 Offer 11. 旋转数组的最小数字
这个判断在左右两边尽量与r所在下标比较,不然的话特殊情况下只有是一个递增数组的话会出问题。
class Solution {
public:
int minArray(vector<int>& numbers) {
int l=0,r=numbers.size()-1;
while(l<r)
{
int mid=(l+r)/2;
if(numbers[mid] >numbers[r])
{
l=mid+1;
}
else if(numbers[mid]<numbers[r])
{
r=mid;
}
else if(numbers[mid]==numbers[r])
{
r--;
}
}
return numbers[l];
}
};
NC48 在旋转过的有序数组中寻找目标值![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e4caf2efa8f3450083fd7aa55c8b2b47.png)
class Solution {
public:
int search(vector<int>& nums, int target) {
// write code here
int l=0,r=nums.size()-1;
while(l<r)
{
int mid=(r-l)/2+l;
if(nums[mid]==target)
{
return mid;
}
if(nums[mid]>nums[r])
{
if(nums[mid]>target&&target>=nums[l])
{
r=mid-1;
}
else {
l=mid+1;
}
}
else
{
if(target>nums[mid]&&target<=nums[r])
{
l=mid+1;
}
else
{
r=mid-1;
}
}
}
if(nums[l]==target) return l;
return -1;
}
};