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

滑动窗口的最大值

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

暴力

时间复杂度 O(n*k),空间复杂度O(1)

class Solution {
public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
        vector<int> result;
        int len = num.size();
        if (len == 0 || size < 1 || len < size) return result;
        for (int i = 0; i + size - 1 < len; ++i) {
            int j = i + size - 1;
            int max_val = num[j];
            for (int k = j; k >= i; --k) {
                max_val = max(num[k], max_val);
            }
            result.push_back(max_val);
        }
        return result;
    }
};

单调队列

时间复杂度 O(n),空间复杂度O(k)

#include <deque>
class Solution {
public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
        vector<int> result;
        int len = num.size();
        if (len == 0 || size < 1 || len < size) return result;
        
        deque<int> dq_idx;
        // 初始窗口
        for (int i = 0; i < size; ++i) {
            while (!dq_idx.empty() && num[i] >= num[dq_idx.back()]) {
                dq_idx.pop_back();
            }
            dq_idx.push_back(i);
        }
        
        for (int i = size; i < len; ++i) {
            result.push_back(num[dq_idx.front()]);
            // 如果当前元素大,则要从后面把比num[i]小的都pop
            while (!dq_idx.empty() && num[i] >= num[dq_idx.back()]) {
                dq_idx.pop_back();
            }
            // 将队头过期元素清除
            while (!dq_idx.empty() && i - dq_idx.front() >= size) {
                dq_idx.pop_front();
            }
            dq_idx.push_back(i);
        }
        result.push_back(num[dq_idx.front()]);
        return result;
    }
};

2023-剑指-队列 + 栈 文章被收录于专栏

2023-剑指-队列 + 栈

全部评论

相关推荐

06-27 18:45
中山大学 Ruby
25届应届毕业生,来广州2个礼拜了,找不到工作,绝望了,太难过了…
应届想染班味:9爷找不到工作只能说明,太摆了或者太挑了。
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-29 17:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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