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

旋转数组的最小数字

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

import java.util.*;


public class Solution {
    // 时间复杂度要求O(logn),使用二分查找
    // 因为数组原本是有序的,旋转之后,分为了两部分
    // 前面部分一定都大于后面部分
    // 这时使用二分查找,如果nums[mid]的值大于nums[right],则表示测试mid在前一部分,需要将left = mid + 1
    // 如果nums[mid] < nums[right],则表示mid在后面一部分,需要将right = mid;
    // 如果nums[mid] == nums[right],需要不断缩小right的值,来缩小氛围
    public int minNumberInRotateArray (int[] nums) {
        // write code here
        if(nums.length == 0) return 0;
        int left = 0, right = nums.length - 1;
        while(left<right){
            int mid = (left + right) / 2;
            if(nums[mid] > nums[right]) left = mid + 1;
            else if(nums[mid] < nums[right]) right = mid;
            else right--;
        }


        return nums[left];
    }
}

全部评论

相关推荐

头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
07-22 11:12
门头沟学院 Java
不是,我就随手投的怎么还真发面试啊
皮格吉:大厂特别快的——来自已经被共享中
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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