题解 | #旋转数组的最小数字#

旋转数组的最小数字

http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba

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

数据范围:1 \le n \le 100001≤n≤10000,数组中任意元素的值: 0 \le val \le 100000≤val≤10000 要求:空间复杂度:O(1)O(1) ,时间复杂度:O(logn)O(logn)

public class Solution {
    public int minNumberInRotateArray(int [] array){
        int len = array.length;
        int right=len-1;
        int left =0;
        while(left<right){
            int mid = (left+right)/2;
            //如果array[mid]>array[right],说明后面的数更小,且当前中间值不为最小值,因此left+1
            if(array[mid]>array[right]){
                left=mid+1;
            }
            //如果中间的值小于右边的值,说明前面的值有可能存在更小的值,也有可能当前的中间值就是最小值,因此不能设置right=mid-1;
            //而是right=mid;
            else if(array[mid]<array[right]){
                right = mid;
            }
            else{
                right--;
            }
        }
        return array[right];
        
    
    }
}
全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务