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

旋转数组的最小数字

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

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int[] array) {
        return getMin(array, 0, array.length - 1);
    }

    public int getMin(int[] array, int start, int end) {
        if (start == end) {
            return array[start];
        }
        int midIndex = (start + end) / 2;
        int mid = array[midIndex];
        int left = array[start];
        int right = array[end];

        if (mid > left &&
                mid < right) { //大于左边值,小于右边值,则说明是是升序,左边值则是最小值
            return left;
        } else if (mid >
                   right) { // 如果mid大于右边的值,则说明在mid和右边之间
            return getMin(array, Math.min(midIndex + 1, end), end);
        } else if (mid >
                   left) { // 如果mid 小于左边的值,则说明左边和mid之间
            return getMin(array, start, Math.max(midIndex - 1, start));
        } else {
            int leftMin = getMin(array, start, Math.max(midIndex , start)); // 这里没有减1,是因为这里如果减1可能会导致少一个值,midIndex可能就是最小的值会丢掉
            int rightMin = getMin(array, Math.min(midIndex + 1, end), end);
            return Math.min(leftMin, rightMin);
        }

    }




}

全部评论

相关推荐

05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务