您的位置:首页 > 职场人生

《剑指Offer》面试题八之旋转数组的最小数字

2017-03-14 23:58 615 查看

题目描述

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

算法描述

/**
* @param array 传入的旋转数组
* @param size  传入的数组的大小
* */
public static void FindMinRotateArray(int[] array,int size){

if(array==null||size<=0){
System.out.println("输入有误");
return;
}
int start=0;
int end=size-1;
int middle=start;

while(array[start]>=array[end]){
if(end-start==1){
middle=end;
System.out.println(array[end]);
return;
}

middle=(start+end)/2;

//如果 start middle end 三个下标对应的数字相等
//则只能顺序查找

if(array[start]==array[middle]&&array[middle]==array[end]){
int minNum=array[start];
for(int i=start+1;i<=end;i++){
if(array[i]<minNum){
minNum=array[i];
}
}
System.out.println(minNum);
return;
}

if(array[middle]>=array[start]){
start=middle;
}else if(array[middle]<=array[end]){
end=middle;
}
}
System.out.println(array[middle]);
}


要记得注意这几种情况:

1 1 1 1 0

1 0 1 1 1

1 1 1 0 1

等等。

还有如果想AC oj上面的算法题,用Java的话会超时。注意把算法改成C++语言描述。

OJ地址:http://ac.jobdu.com/problem.php?pid=1386
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: