写在前面
代码说明:代码的下载地址: https://github.com/WuNianLuoMeng/Coding
视频说明:第一次以这样的形式录视频,如果有哪里说的不对,还请各位及时指出,谢谢~
旋转数组的最小数字 视频链接
方法一:遍历数组,不断去更新保存最小值的变量。时间复杂度是O(n)
public int minNumberInRotateArray(int [] array) { if (array.length == 0) { return 0; } int ans = array[0]; for (int i = 1; i < array.length; i++) { ans = Math.min(ans, array[i]); } return ans; }
方法二:通过二分的方法,不断去更新存在于两个子数组(两个非递减排序子数组)中的下标。时间复杂度是O(log(n))
public int minNumberInRotateArray(int[] array) { if (array.length == 0) { return 0; } int l = 0; int r = array.length - 1; while (l < r - 1) { int mid = (l + r) >> 1; if (array[mid] >= array[l]) { l = mid; /// 说明mid所在的位置是在第一个非递减子数组中 } else if (array[mid] <= array[r]) { r = mid; /// 说明mid所在的位置是在第二个非递减子数组中 } } return array[r]; }