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

旋转数组的最小数字

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

全部评论

相关推荐

06-23 11:43
门头沟学院 Java
allin校招的烤冷面很爱看电影:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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