剑指Offer:面试题8——旋转数组的最小值(java实现)

时间:2023-03-08 23:24:21
剑指Offer:面试题8——旋转数组的最小值(java实现)

题目描述:

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

输入

一个递增排序的数组的一个旋转

输出

旋转数组的最小元素。

例如数组{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
书上的那个实现没通过。。。