您的位置:首页 > Web前端

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

2017-07-15 21:40 357 查看
问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: