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

滑动窗口的最大值

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

模拟窗口滑动的过程,用一个数组来记录滑动窗口内的值,一个数组来记录最大值。每次窗口滑动都将最大值数组的队尾压入结果栈,最后返回结果栈。
这题要做出来并不难,难在追求优秀的时间复杂度和空间复杂度。感觉这个代码还有较大改进空间。欢迎讨论。

class Solution {
public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
        vector<int> result;
        if(size == 0 || size > num.size()){
            return result;
        }
        vector<int> que;
        queue<int> max;
        for(int i = 0;i < num.size();i++){
            if(que.size() < size){
                que.push_back(num.at(i));
                if(max.empty()){
                    max.push(num.at(i));
                }
                else{
                    if(num.at(i) > max.back()){
                        max.push(num.at(i));
                    }
                }
                if(i == size - 1){
                    result.push_back(max.back());
                }
                continue;
            }
            else{
                int front = que.front();
                que.erase(que.begin());
                if(front == max.front()){
                    max.pop();
                }
                que.push_back(num.at(i));
                if(max.empty()){
                    int imax = que.front();
                    for(int i = 1;i < que.size();i++){
                        if(que.at(i) > imax){
                            imax = que.at(i);
                        }
                    }
                    max.push(imax);
                }
                else if(num.at(i) > max.back()){
                    max.push(num.at(i));
                }
                result.push_back(max.back());
            }
        }
        return result;
    }
};
全部评论

相关推荐

黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经410star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务