旋转数组的最小数字
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
1 import java.util.ArrayList; 2 public class Solution { 3 public int minNumberInRotateArray(int [] array) { 4 if (array.length == 0) return 0; 5 int n = array.length; 6 int l = 0, r = array.length - 1; 7 while (l < r) { 8 int mid = (l + r) / 2; 9 int flag = 0; 10 if (mid - 1 < 0 || array[mid - 1] > array[mid]) flag++; 11 if (mid + 1 >= array.length || array[mid + 1] >= array[mid])flag++; 12 if (flag == 2) { 13 return array[mid]; 14 } 15 if (array[mid] <= array[n - 1]) { 16 r = mid - 1; 17 } else { 18 l = mid + 1; 19 } 20 } 21 return array[l]; 22 } 23 }