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

旋转数组的最小数字

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

这里是我自己画的,最直观的图片了,经过旋转后,数据是分层的,通过分层的数据,确实可以快速定位到,最小值的位置。

nums[mid] < nums[high] nums[mid] > nums[high] nums[mid] < nums[high]

最小值在中间 最小值在右间 最小值在左间

解题思路:

从上面可以看到,因为旋转后的数据,依旧是分层的,还是可以快速判断,最小值在那一边。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
    public int minNumberInRotateArray (int[] nums) {
        int low = 0;
        int high = nums.length -1;
        while(low <= high) {
            int mid = low + (high - low) /2;
            // 不好确认在左右,所以排除掉最后面的一个,再一个个试
            if(nums[mid] == nums[high]) {
                high = high - 1;
            } 
            // 说明最小数在右边
            else if(nums[mid] > nums[high]) { 
                low = mid + 1;
            }
            // 说明最小数在左边
            else {
                high = mid;
            }
        }
        return nums[low];
    }
}

当数据是【6,4】的时候

第一次循环

第二次循环

mid

0

因为low==high退出循环了,所以最终low=1

low

1

high

1

所以最终的low的值是1

当数据是【1,0,1,1】

第一次循环

第二次循环

第三次循环

mid

1

0

因为low==high退出循环,所以最终low=1

low

0

1

high

1

1

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
MinJerous:虽然我一直说 计算机不怎么卡学历 但是至少得一本
点赞 评论 收藏
分享
我看看你怎么个事来
牛牛爱吃草草:我看看你怎么个事来
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务