タイトル:https : //leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/
class Solution {
public:
int findMin(vector<int>& nums) {
/*假设按照升序排序的数组在预先未知的某个点
*上进行了旋转请找出其中最小的元素。
*假设数组中不存在重复元素
*/
int n = nums.size();
int l = 0,r = n-1;
int mn = nums[0];
while(l < r) {
int m = (l+r)/2;
if(nums[m] < nums[r]) {
mn = min(mn,nums[m]);
r = m-1;
}else {
l = m+1;
}
}
mn = min(mn,nums[l]);
return mn;
}
};
题目2:https ://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/
class Solution {
public:
int findMin(vector<int>& nums) {
/*假设按照升序排序的数组在预先未知的某个点
*上进行了旋转请找出其中最小的元素。
*数组中可能存在重复的元素
*/
int n = nums.size();
int l = 0,r = n-1;
int mn = nums[0];
while(l < r) {
int m = (l+r)/2;
while(m < r && nums[m] == nums[r]) r--;
if(nums[m] <= nums[r]) {
mn = min(mn,nums[m]);
r = m-1;
}else {
l = m+1;
}
}
mn = min(mn,nums[l]);
return mn;
}
};