牛客网刷题java之把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素

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

import java.util.ArrayList;
/*
本题的一个简单算法就是从左到右遍历,由于是递增的,直到找到一个小的数就可以停止了
但是这种方法速度相对太慢,所以可以采用二分法的思想
采用二分法的思想,定义一个left和right逐步缩小范围,最终确定最小的数
*/
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        //定义左边界
        int left=0;
        //定义右边界
        int right=array.length-1;
        //当左小于右的时候,说明范围还未缩小完毕
        while(left<right)
        {
            //定义中间值
            int mid=(left+right)/2;
            //如果大于的话,说明最小值在右面,更新左边界值
            if(array[mid]>array[right])
            {
                left=mid+1;
                //判断是否等于,等于的话很难判断,只能让right减一,继续遍历
            }else if(array[mid]==array[right])
            {
                right=right-1;
            }else
                //下面是小于的情况,更新右边界值
            {
                right=mid;
            }
        }
        //最后这个位置返回right,left都是可以的
        return array[right];
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41901915/article/details/90175973