一、题目描述
有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
二、输入描述
3,4,5,1,2
三、输出描述
1
四、Java算法源码
public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNextLine()){String[] arr=sc.nextLine().split(",");int[] nums = Arrays.asList(arr).stream().mapToInt(Integer::parseInt).toArray();System.out.println(minNumberInRotateArray(nums));}
}public static int minNumberInRotateArray(int[] array) {// 特殊情况判断if (array.length== 0) {return 0;}// 左右指针i jint i = 0, j = array.length - 1;// 循环while (i < j) {// 找到数组的中点 mint m = (i + j) / 2;// m在左排序数组中,旋转点在 [m+1, j] 中if (array[m] > array[j]) {i = m + 1;}// m 在右排序数组中,旋转点在 [i, m]中else if (array[m] < array[j]){j = m;}else{// 缩小范围继续判断j--;}}// 返回旋转点return array[i];
}
五、效果展示
🏆本文收录于,华为OD机试2023(Java)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。