剑指offer -- 旋转数组最小值

来源:互联网 发布:苹果windows怎么截图 编辑:程序博客网 时间:2024/06/05 07:37

问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.

public class RotateMin {public static void main(String[] args) throws Exception {//int[] arr = {3,4,5,1,2};int[] arr = {1,1,1,0,1};int minVal = minInRotate(arr);System.out.println(minVal);}private static int minInRotate(int[] arr) throws Exception {if(arr == null || arr.length <=0){throw new Exception("无效参数");}int start = 0;int end = arr.length-1;int middle = start;if(arr[start]>=arr[end]){while(start<end){if(start==end-1){middle = end;break;}middle = (start+end)/2;if(arr[start]==arr[end] && arr[start]==arr[middle]){return minInOrder(arr,start,end);}if(arr[middle]>=arr[start]){start = middle;}else if(arr[middle]<=arr[end]){end = middle;}}}return arr[middle];}private static  int minInOrder(int[] arr, int start, int end) {int result = arr[start];for(int i=1;i<arr.length;i++){if(result>arr[i]){result = arr[i];}}return result;}}


原创粉丝点击