题目

有一个长度为N的升序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求它的最小值。

提示:
1 <= N<= 10000
0 <= rotateArray[i] <= 10000
你可以使用O(logN)的时间复杂度通过该题吗?

思路

判断数组是否为空,若为空说明没有元素,返回0;若不为空,遍历数组,找到第一个小于0号元素的下标,返回这个元素的值即可,若找不到小于0号元素的值,只有一种情况,旋转数组后的元素和0号元素的值相等。也就是:输入:[3,100,200,3],返回值:3 的这种

代码

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        int result = 0;
        if(array.length == 0){
            return result;
        }else{
            for(int i=1;i<array.length;i++){
                if(array[i] < array[0]){
                    result = i;
                    break;
                }
            }

            if(result>0){
                //result大于0说明数组中有元素比0号元素的值小
                return array[result];
            }else{
                //result=0说明没有比0号元素小的值
                //只有一种情况:旋转数组后的元素和0号元素相等,返回0号元素的值即可
                return array[0];
            }
        }
    }
}