题解 | #滑动窗口的最大值#

滑动窗口的最大值

http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

对暴力方法的简单优化,添加两个变量保存当前最大值maxNum和最大值在当前所在窗口的位置标志tag。
每次窗口移动则tag减一,如果tag>0,也就是之前的最大值还在窗口内,直接与新添加的值进行比较,更新相应的最大值和位置标志,如果tag<0,则在新的窗口,暴力更新最大值和位置标志。

class Solution {
public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
        int maxNum=0,tag=0;
        vector<int> menber;
        if(size<=0 || size > num.size())return menber;
        for(int i = 0; i < size; i++){
            if(num[i]>maxNum){
                maxNum = num[i];
                tag = i;
            }
        }
        menber.push_back(maxNum);
        for(int i = size;i < num.size();i++){
            tag--;
            if(num[i]>=maxNum && tag>=0){
                maxNum = num[i];
                tag = size-1;
            }
            if(tag < 0){
                maxNum = num[i-size+1];
                for(int j = i-size+1;j <=i;j++){
                    if(num[j]>=maxNum){
                        maxNum = num[j];
                        tag = j-(i-size+1);
                    }
                }
            }
            menber.push_back(maxNum);
        }
        return menber;
    }
};
全部评论

相关推荐

MScoding:你这个实习有一个是当辅导老师,这个和找技术岗没有关系吧?
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客企业服务