牛客网刷题---非减排序的数组-旋转数组

送给你我:无一事敢马虎,无一事敢懈怠,心存敬畏之心,不敢得意忘形!

-----------------------------------------------------------------------------------------------

牛客网刷题java

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

解决思路

非递减数组:就是递增数组,但是允许重复数值

方法一:遍历

复杂度:n

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

 

方法二:二分查找

复杂度:n/2

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if(array.length==0) return 0;
        if(array.length==1) return array[0];
        int a=array[0];
        int l=0,r=array.length-1,mid=(l+r)/2;
        while(l!=r){
            if(array[mid]>=a){l=mid+1;mid=(l+r)/2;}
            else if(array[mid]<a){r=mid;mid=(l+r)/2;}
        }
        return Math.min(array[l],a);
    }
}

 方法三:递归

待写

posted @ 2021-03-02 10:32  被梦想尘封的时光  阅读(91)  评论(0编辑  收藏  举报