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

旋转数组的最小数字

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

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        //首先这也是一个有序的数组,有序分为两节
        //并且可以知道,最小值,是旋转部分的头
        //可以理解为往中间找最小值
        //比较:第左边的值还要小;比右边的值还要大
        int left = 0;
        int right = array.length-1;
        while (left < right) {
            //mid的值可能等于left
            int mid = (left + right) / 2;
            if (array[mid] < array[left]) {
                //说明最小值在mid前面
                right = mid;
            } else if (array[mid] > array[right]){
                //说明最小值在mid后面
                left = mid + 1;
            }else{
                //大于等于left并且小于等于right
                //当存在left==mid,不能移动左指针
                //可以移动右指针的原因是,右指针的数字只能大于等于mid
                right--;

            }
        }
        return array[left];
    }
}

首先要分析,二分法只能用于有序数组。这其实是一个两节的有序数组。比较mid和left,比left小说明在mid前面,比right大,说明在mid后面。然后要注意在此之间的情况,就是移动右指针即可,不要动左指针,因为会存在mid=left的情况,这时候mid要比right小,可以right--

全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务