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

旋转数组的最小数字

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];
    }
};

全部评论

相关推荐

榕城小榕树:1200单休,我去干点啥别的不好
点赞 评论 收藏
分享
06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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