输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的全部元素都大于0,若数组大小为0,请返回0。java
二分查找,此处查找有两个终止条件,一是传统的查找结束,二是提早搜索完某一子段。
时间复杂度O(lgn),空间复杂度O(1)。数组
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { if(array.length < 1) return 0; int start = 0; int end = array.length - 1; int mid = 0; while(start < end) { if(array[start] < array[end]) return array[start]; mid = (start + end) / 2; if(array[start] < array[mid]) { start = mid + 1; } else if(array[mid] < array[end]) { end = mid; } else { start++; } } return array[start]; } }
与普通的二分查找不一样,该题某一子段被用完须要提早退出。
code