题目
题目链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/
题解
- 暴力法
这是作为菜鸟的我使用的方法,直接用迭代或者使用内置函数找到最小值直接返回,时间复杂度O(n)。
class Solution {
public int minArray(int[] numbers) {
return Arrays.stream(numbers).min().getAsInt();
}
}
- 二分法
使用暴力法当数据规模很大时必然会对性能影响很大,对于有序列表元素的查找我们就应该想到能不能使用二分查找解决,应为二分法可将时间复杂度降到O(log2(n))。
class Solution {
public int minArray(int[] numbers) {
// 二分法 时间复杂度为:O(log2n)
public static int minArray1(int[] numbers) {
int l=0,r=numbers.length-1;
int mid;
while (l < r){
mid = (l + r)/2;
if (numbers[mid] < numbers[r]){
r = mid;
}else if (numbers[mid] > numbers[r]){
l = mid + 1;
}else {
r --;
}
}
return numbers[l];
}
}
}