https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/
思路:首先可以发现,经过旋转后的数组的左侧的最小值一定大于右侧的最大值,那么我们可以二分比较
a
[
m
i
d
]
a[mid]
a[mid]和
a
[
r
]
a[r]
a[r],如果
a
[
m
i
d
]
<
a
[
r
]
a[mid]<a[r]
a[mid]<a[r],令
r
=
m
i
d
r=mid
r=mid,此时不让
r
=
m
i
d
−
1
r=mid-1
r=mid−1是因为这个位置可能是我们要找的最小值,必须让其在二分范围内;否则可以令
l
=
m
i
d
+
1
l=mid+1
l=mid+1。
class Solution {
public:
int findMin(vector<int>& nums) {
int l=0,r=nums.size()-1,mid;
while(l<=r)
{
mid=(l+r)>>1;
if(nums[mid]<nums[r])
r=mid;
else
l=mid+1;
}
return nums[r];
}
};