剑指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
书上的那个实现没通过。。。
posted @ 2016-07-06 09:52  一只猫的爱园  阅读(351)  评论(0编辑  收藏  举报