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

旋转数组的最小数字

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int minNumberInRotateArray (int[] nums) {
        // write code here
        // 解题思路:
        // 1.采用双指针
        // 2.采用2分法
        // 3.如果mid < right 说明mid 到right 是递增的,则最小值在 0 ~mid之间 riight = mid
        // 4. 如果mid > right 说明最小值在mid 和 right 之间,left = mid + 1;
        // 5.如果相等则不能判定在那边,right--
        // 6.最终left的位置就是最小值的位置
        if (nums == null || nums.length == 0) {
            return -1;
        }

        int left = 0;
        int right = nums.length - 1;

        while (left < right) {
            int mid = left + (right - left) / 2;

            if (nums[mid] < nums[right]) {
                // 说明最小值在左边
                right = mid;
                continue;
            }

            // 说明最小值在右边
            if (nums[mid] > nums[right]) {
                left = mid + 1;
                continue;
            }

            right--;
        }

        return nums[left];
    }
}

全部评论

相关推荐

28小凳也想实习:项目不用一个业务一个轮子吗,刷牛客好多人说要一业务一轮子
点赞 评论 收藏
分享
01-26 18:45
门头沟学院 Java
一天代码十万三:哥们实习再包一下吧,产出太笼统了,尽量体现业务
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务