旋转数组的最小数值(简单)
2020年8月12日
题目来源:力扣
解题
可以直接排序拿第一个数值,也可以找第一个比数组第一位小的数值,这里采用二分查找最小数值
class Solution {
public int minArray(int[] numbers) {
int left=0;
int right=numbers.length-1;
int center=0;
while(left<right){
//取中点索引,不写(left+right)/2是为了防止数据溢出
center=left+(right-left)/2;
//当中点值大于右边界值时,说明还没找到最小值,而最小值肯定在中点到右边界之间
if(numbers[center]>numbers[right]){
left=center+1;
//当中点值小于右边界时,说明还没找到最小值,应该缩小右边界,最小值肯定在左边界到中点值之间
}else if(numbers[center]<numbers[right]){
right=center;
//因为每次都是左边界前进一位,所以当中点值等于右边界时,就把右边界往左一位,过滤重复数值的情况
}else{
right--;
}
}
return numbers[left];
}
}