c++:
class Solution {
public:
int minArray(vector<int>& numbers) {
int low = 0,high = numbers.size() - 1;
while(low < high){
int m = low + (high - low)/2;//(high + low)/2当high值大时,会溢出
if(numbers[m] > numbers[high]){//中间值大于末尾值,最小值在右边
low = m +1;
}else if(numbers[m] < numbers[high]){//中间值小于末尾值,最小值在左边
high = m;
}else{
high--;//中间值等于末尾值,不能确定最小值在左边还是右边,缩小区间
}
}
return numbers[low];
}
};
class Solution {
public:
int minArray(vector<int>& numbers) {
sort(numbers.begin(),numbers.end());//从小到大排序
return numbers[0];//返回排序后的第一个元素
}
};
python:
class Solution:
def minArray(self, numbers: List[int]) -> int:
return min(numbers)
二分:
class Solution:
def minArray(self, numbers: List[int]) -> int:
left,right = 0,len(numbers)-1
while left <= right:
mid = left + (right - left)//2
if numbers[mid] > numbers[right]:
left = mid + 1
elif numbers[mid] < numbers[right]:
right = mid
else:
right -= 1
return numbers[left]