第一种暴力算法,如果前面的数字比后面的数字大,证明找到了最小数字
第二种二分法,建立left mid right 三个指针,mid = (left+right)/2
如果mid>right,则证明在右边部分,left = mid+1;
如果mid<right,则证明在左边部分,需要注意的是,right=mid
如果mid==right,没有办法判断,所以right=right+1;
循环的条件是while(left<right),因为当left==right的时候,就弹出了
class Solution {
public int minArray(int[] numbers) {
//第一种做法就是前面的数字比后面的数字大,就证明是后一个数字就是最小值
//第二种做法是使用二分查找法
int left = 0,right = numbers.length-1,mid =0;
while(left<right){
//
mid = (left+right)/2;
if(numbers[mid]<numbers[right]){
//可能左半部分是需要的值,不需要+1
right = mid;
}else{
if(numbers[mid]>numbers[right]){
left = mid+1;
}else{
right--;
}
}
}
return numbers[right];
}
}