题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解题思路:
注意:这个题目和leetcode上的旋转数字的查找很类似。
但不一样,一个是找最小,要判断中间这个数是否是在递增子数组里面,如果遇到都相等的情况就不好判断。
// 当low和up两个指针相邻时候,就找到了最小值,也就是
//右边序列的第一个值
1 import java.util.ArrayList; 2 public class Solution { 3 public int minNumberInRotateArray(int [] array) { 4 int low=0; 5 int high=array.length-1; 6 if(high==0||array==null) 7 { 8 return 0; 9 } 10 11 int mid=0; 12 13 while(low<=high) 14 { 15 if(high-low==1) 16 { 17 mid = high; 18 break; 19 } 20 mid = low+(high-low)/2; 21 if(array[mid]>=array[high]) 22 { 23 low = mid; 24 } 25 else if(array[mid]<=array[high]) 26 { 27 high = mid; 28 } 29 else if(array[mid]==array[high] && array[mid] == array[low]) 30 { 31 int result = sort(array); 32 return result; 33 } 34 } 35 return array[mid]; 36 } 37 38 public int sort(int [] array){ 39 int result = array[0]; 40 for(int i=1;i<array.length;i++) 41 { 42 if(result<array[i]) 43 { 44 result = array[i]; 45 } 46 } 47 return result; 48 } 49 }