题目描述:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入
一个递增排序的数组的一个旋转
输出
旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路:
1.直接遍历一次数组,即可得出最小值。时间复杂度O(n)
2.由于原数组是有序的,那么旋转以后,出现的第一个打乱顺序的元素即为原数组的第一个元素,即最小值。时间复杂度最坏也是O(n)
3.利用旋转数组的特性,利用二分查找的办法。
代码如下:
//思路1
public int minNumberInRotateArray1(int[] array){
if(array == null || array.length == 0){
return 0;
}
int min = array[0];
for(int i = 1; i < array.length; i++){
if(min > array[i]){
min = array[i];
}
}
return min;
}
//思路2
public int minNumberInRotateArray(int [] array) {
if(array == null || array.length == 0){
return 0;
}
for(int i = 1; i < array.length; i++){
if(array[i-1] > array[i]){
return array[i];
}
}
return 0;
}
//思路3
书上的那个实现没通过。。。