public class 旋转数组的最小数字 {
public static int minArray(int[] arr) {
int left = 0, right = arr.length - 1;
while (left < right) { //条件判断
int mid = (left + right) / 2; //取中间数与arr[right]作比较
if (arr[mid] > arr[right]) left = mid + 1; //如果中间数大于arr[right],说明min一定在mid的右边,所以将左边界缩小
else if (arr[mid] < arr[right]) right = mid;//如果中间数小于arr[right],说明min一定在mid的左边,但是也有可能mid就是最小值,所以不-1
else {
//如果中间数等于arr[right],,说明,,不能够排除一下情况
//left =0 right = 5 mid =2 如果直接执行 right= mid,忽略中间的部分数据,会导致出错
// 2,2,2,2,0,1,2
//所以可以通过 right 前移以为来保证 right仍然是在最小数的右边
right--;
}
}
return arr[right];
}
public static void main(String[] args) {
System.out.println(minArray(new int[]{3, 4, 5, 0, 1, 2})); //0
System.out.println(minArray(new int[]{2,2,2,2,0,1,2})); //0
}
}
旋转数组的最小数字
于 2022-07-18 09:21:29 首次发布