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

旋转数组的最小数字

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

思路:数组是非降序数组,此题 比较右端点,如果旋转则旋转后 [l,k] 非降序 ,[k,r] 非降序,且[l,k]内值 >= [k,r] 值

当 f[m] < f[r] 时,说明 m 到 r 非降序,最小值在左边,r = m;
当 f[m] == f[r] 时, r = r -1 ;缩小空间
当 f[m] > f[r] 时,说明旋转了,最小值在 [m,r]内, l = m + 1;

假设比较左端点:

当 f[m] < f[l] 时,说明 [m,r] 是非降序,最小值在 [l,m] 中,r = m;
当 f[m] > f[l] 时, 说明 [l,m] 非降序 (可能没有旋转,可能旋转),结果 可能 在左边 
可能在右边,无法判断是否旋转
class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        int l = 0,r = rotateArray.size()-1;
        while(l < r){
            int m = l + (r - l)/2;
            if(rotateArray[m] > rotateArray[r]){
                l = m + 1;
            }else if(rotateArray[m] == rotateArray[r]){
                r = r-1;
            }else{
                r = m;
            }
            
        }
        return rotateArray[l];
    }
};

全部评论

相关推荐

Noel_:中石油是这样的 哥们侥幸混进免笔试名单 一看给我吓尿了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务