旋转数组的最小数字

旋转数组的最小数字

https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=13&tqId=11159&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey

图片说明
图片说明

 public int minNumberInRotateArray(int [] array) {
        if(array.length == 0)
            return 0;
        int l = 0, r = array.length-1;
        while(l < r){
            if(array[l] < array[r]){ // 这一步的作用是当l~r这部分 l位置小于r位置,那么l位置就是最小的那个,为什么呢?
                                    //当 array[mid] > array[r]的时候,l = mid+1,因为array[mid] > array[r],所以array[l]要是小于array[r],那么array[l]不就是最小的那个了吗?
                return array[l];
            }
            int mid = l + (r-l)/2;
            if(array[mid] < array[r]){
                r = mid;
            }else if(array[mid] > array[r]){
                l = mid+1;
            }else {
                --r;  //相等的时候为什么要r--
                       //因为当 3 1  2  2 2 的时候
                       //我们可以知道array[mid] == array[r],此时最小的数要么是array[mid],要么是mid以前的数,那么为了使得mid往前移位,我们就需要将r--
            }
        }
        return array[l];
    }

剑指offer 文章被收录于专栏

为刷过的每一道题都书写一篇题解,便于重复练习~

全部评论

相关推荐

点赞 评论 收藏
分享
想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务