题解 | #旋转数组的最小数字#
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int[] array) { return getMin(array, 0, array.length - 1); } public int getMin(int[] array, int start, int end) { if (start == end) { return array[start]; } int midIndex = (start + end) / 2; int mid = array[midIndex]; int left = array[start]; int right = array[end]; if (mid > left && mid < right) { //大于左边值,小于右边值,则说明是是升序,左边值则是最小值 return left; } else if (mid > right) { // 如果mid大于右边的值,则说明在mid和右边之间 return getMin(array, Math.min(midIndex + 1, end), end); } else if (mid > left) { // 如果mid 小于左边的值,则说明左边和mid之间 return getMin(array, start, Math.max(midIndex - 1, start)); } else { int leftMin = getMin(array, start, Math.max(midIndex , start)); // 这里没有减1,是因为这里如果减1可能会导致少一个值,midIndex可能就是最小的值会丢掉 int rightMin = getMin(array, Math.min(midIndex + 1, end), end); return Math.min(leftMin, rightMin); } } }