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

旋转数组的最小数字

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

二分

二分时每次与右端点进行判断,注意相等的时候,右端点减一处理。

此外不能与左端点击进行比较。

情况1 :1 2 3 4 5 , arr[mid] = 3. target = 1, arr[mid] > target, 答案在mid 的左侧。

情况2 :3 4 5 1 2 , arr[mid] = 5, target = 3, arr[mid] > target, 答案却在mid 的右侧。

所以不能把左端点当做target。

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        
        int l = 0, r = rotateArray.size() - 1;
        while (l < r) {
            int mid = (l + r) / 2;
            if (rotateArray[mid] < rotateArray[r]) {
                r = mid;
            } else if (rotateArray[mid] > rotateArray[r]) {
                l = mid + 1;
            } else {
                r--;
            }
        }
        return rotateArray[r];
    }
};
全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务