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

旋转数组的最小数字

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

  1. 这就是简单的二分法的变体。
class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        if(!rotateArray.size()) return 0;

        int begin = 0, end = rotateArray.size()-1;
        while(begin < end){
            if(rotateArray[begin]<rotateArray[end]){//必然第一个是最小的,因为旋转数组具有首元素大于末尾元素的性质。
                return rotateArray[begin];
            }

            int  mid = (begin+end)/2;
            if(rotateArray[mid] > rotateArray[end] ){
                begin = mid+1;//答案必然在mid后面。不可能是mid本身
            }else if(rotateArray[mid] < rotateArray[end]){
                end = mid;//因为有可能中点就是答案。
            }else{
                end--; //因为是一个非递减序列
            }


        }

        return rotateArray[begin];
    }
};
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

MinJerous:虽然我一直说 计算机不怎么卡学历 但是至少得一本
点赞 评论 收藏
分享
那一天的Java_J...:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
07-02 13:50
闽江学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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