您的位置:首页 > 其它

【追求进步】旋转数组的最小数字

2016-03-17 13:01 351 查看


【加油加油,每天进步三个算法!希望自己能坚持下去····】


题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

在线代码:

import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
//理清楚思路,二分查找方法
//边界处理
// 判断输入是否合法
if (array == null || array.length == 0) {
return 0;
}
//初始化
int index1=0;
int index2=array.length-1;
int indexMid=index1;
/*
此时两个指针的距离是1,边个名
*/
while(array[index1]>=array[index2]){
if(index2-index1==1){
return array[index2];
}
//取中间的数
indexMid=(index1+index2)/2;
//【特别提醒】考虑如果三个数都相等,则需要进行顺序处理,从头到尾找最小值
if(array[indexMid]==array[index1]&&array[index2]==array[indexMid]){
return Midorder(array,index1,index2);
}
// 如果中间位置对应的值在前一个排好序的部分,将lo设置为新的处理位置
if(array[indexMid]>=array[index1]){
//说明中间的元素是前半递增序列
index1=indexMid;//移动指针1的到中间位置
}
// 如果中间位置对应的值在后一个排好序的部分,将hi设置为新的处理位置
else if(array[indexMid]<=array[index2]){
index2=indexMid;//移动指针2到中间位置
}

}
return array[indexMid];
}
public static int Midorder(int [] array,int start,int end){
int result=array[start];
for(int i=start+1;i<=end;i++){
if(result>array[i]){
result=array[i];
}
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: