题解 | #旋转数组的最小数字#C++二分

旋转数组的最小数字

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

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        // 整体思路:二分法确定拐点位置
        int len = rotateArray.size();
        int left = 0, right = len - 1;
        // 特殊情况:开头元素小于末尾元素,直接返回第一个值
        if (rotateArray[left] < rotateArray[right]) {
            return rotateArray[left];
        }
        while (left < right) {
            int mid = (right + left) / 2;
            // 前两种是找到了拐点
            if (rotateArray[mid] > rotateArray[mid + 1]) {
                return rotateArray[mid + 1];
            } else if (rotateArray[mid] < rotateArray[mid - 1]) {
                return rotateArray[mid];
            } else if (rotateArray[mid] > rotateArray[right]) {
                // 当前中间点大于最右边元素,说明左边可以削
                left = mid + 1;
            } else {
                // 左边不行,就削右边
                right = mid;
            }
        }
        return 0;
    }
};
全部评论

相关推荐

01-29 15:45
已编辑
华中科技大学 前端工程师
COLORSN:可以试一下,小厂看技术栈是不是很落后,如果太拉胯就别去,个人认为有实习氛围比你自己琢磨要高效不少,然后就是小厂其实也有可能会问的很难,这都比较难说,还是看自己项目含金量够不够,寒假还能不能推进学习再选择,毕竟去实习过年就10天假了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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