旋转数组最小数字,c++

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        if (rotateArray.empty())
            return 0;
        int front = 0;
        int back = rotateArray.size() - 1;
        int mid = (front + back) / 2;

        while (rotateArray[front] >= rotateArray[back]){
            if (rotateArray[mid] >= rotateArray[front]){
                front = mid +1;
                mid = (front + back) / 2;
            }
            else if (rotateArray[mid] <= rotateArray[back]){
                back = mid;
                mid = (front + back) / 2;
            }
            if (front == back)
                break;
        }
        return rotateArray[front];
    }
};

非递减数列旋转后是两段非递减数列,采用二分查找。以下罗列注意点
1、存在一开始头=尾的情况,故while条件中有=
2、二分查找时,我们在意的是min在前半区还是后半区:
(1)mid >= front,min在后边
(2)mid <= back, min在前边
最后的情况是mid=front=back,所以要强制退出循环,bug调的焦头烂额。
欢迎交流指正!!!

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务