题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
参考书上的解题思路,使用Java编写程序
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
//二分法
if(array.length ==0){
return 0;
}
//下标初始化
int l=0;
int r=array.length-1;
int mid = l; //递增序列,第一个数即为最小值
if(l==r){
return array[r];
}
while( array[l]>=array[r]){
if(r-l ==1){
return array[r];
// break;
}
mid = (r+l)>>1;
if(array[l]==array[mid] && array[mid]==array[r]){
int min=array[l];
for(int j=0;j<array.length;j++){
if(array[j]<min){
min=array[j];
}
}
return min;
}
if(array[l] <= array[mid]){
l=mid;
}
else if(array[mid]<=array[r]){
r=mid;
}
}
return array[mid];
//暴力方法
// if(array.length ==0){
// return 0;
// }
// else{
// int min=array[0];
// for(int i=1;i<array.length;i++){
// if(array[i]<min){
// min=array[i];
// }
// }
// return min;
// }
}
}
使用测试以下用例,均能测试成功:
[3,4,5,1,2],
[1,0,1,1,1,1],
[1,1,1,0,1],
[1,2,3,4,5,6],
[2],
[3,3,5,6,1,2,3]
有问题的地方,欢迎大家批评指正,谢谢~