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

旋转数组的最小数字

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

int bin_search(vector<int>::size_type l_idx, vector<int>::size_type r_idx, vector<int>& arr){
        int pivot = arr[0]; // (1)
        if(l_idx == r_idx){
            return min(arr[l_idx], pivot); // (2)
        }
        vector<int>::size_type mid_idx = (l_idx + r_idx) / 2;
        if(arr[mid_idx] < pivot){
            return bin_search(l_idx, mid_idx, arr); // (3)
        }
        else if(arr[mid_idx] > pivot){
            return bin_search(mid_idx+1, r_idx, arr); // (4)
        }
        else{
            return min(bin_search(l_idx, mid_idx, arr), bin_search(mid_idx+1, r_idx, arr)); // (5)
        }
    }
(1)将最左边的值单独拿出来作为后面向左搜索还是向右搜索的依据
(2)如果l_idx == r_idx,说明搜索到尽头,返回这个值和pivot中小的那个,防止[1,2,3,4,5]这种未旋转的情况
(3)分类讨论,如果中间值小于pivot,说明落在旋转后的右边区域,右边不用再搜索了
(4)如果中间值大于pivot,说明落在旋转后的左边区域,左边不用再搜索了
(5)相等左右都搜索防止[4,3]只有两个值的这种情况
#剑指offer#
全部评论

相关推荐

不愿透露姓名的神秘牛友
02-12 10:05
小米集团 算法工程师 28.0k*15.0
泡沫灬一触即破:楼上那个看来是看人拿高薪,自己又不如意搁这泄愤呢是吧,看你过往评论很难不怀疑你的精神状态
点赞 评论 收藏
分享
01-23 19:12
门头沟学院 Java
榨出爱国基因:你还差 0.1% 就拿到校招礼盒,快叫朋友给你砍一刀吧
投递拼多多集团-PDD等公司9个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
02-12 18:14
RT,这周五就是情人节了,前女友给我发了消息,我该不该回?
Yoswell:原则上来说让她滚,但是本着工作很累下班想吃瓜的心态,我觉得你可以回一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务