直接扫描
class Solution {
public:
int findMin(vector<int>& nums) {
int n = nums.size();
if(n == 0) return -1;
int minn = INT_MAX;
for(int i = 0; i < n; i++){
minn = min(minn, nums[i]);
}
return minn;
}
};
直接排序
class Solution {
public:
int findMin(vector<int>& nums) {
int n = nums.size();
if(n == 0) return -1;
sort(nums.begin(), nums.end());
return nums[0];
}
};
二分
这里可以出现重复元素,需要特殊处理,具体看视频
https://www.acwing.com/video/2755/
三分半左右
class Solution {
public:
int findMin(vector<int>& nums) {
int n = nums.size();
if(n == 0) return -1;
n -= 1;
while(n > 0 && nums[n] == nums[0]) n--;
if(nums[n] > nums[0]) return nums[0]; //单调递增
int l = 0, r = n;
while(l < r){
int mid = (l + r) / 2;
if(nums[mid] < nums[0]) r = mid;
else l = mid + 1;
}
return nums[r];
}
};