class Solution {
public:
int minArray(vector<int>& numbers) {
int max = numbers[0];
for(int i=1; i<numbers.size(); i++){
if(numbers[i]>=max){
max = numbers[i];
continue;
}
return numbers[i];
}
return numbers[0];
}
};
注意一直递增和只有一个值的时候,都是第一个就最小,所以直接循环外返回
正确思路是使用二分法
跟右边比,因为左边比会有情况不确定的时候
class Solution {
public:
int minArray(vector<int>& numbers) {
int l= numbers.size();
int left = 0;
int right = l - 1;
while(left<right){
int mid = (left+right)/2;
if(numbers[mid]>numbers[right]) left = mid+1;
else if(numbers[mid]==numbers[right]) right = right - 1;
else right = mid;
}
return numbers[left];
}
};