[H滑动窗口] lc239. 滑动窗口最大值(模拟+数据结构+单调队列+滑动窗口模板题)

news/2025/2/26 8:40:57

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:239. 滑动窗口最大值

相关博文:

  • [单调队列+模板] 单调队列模板

题单:

  • 待补充

2. 题目解析

一道单调队列模板题,不赘述了吧。

看看日后有没有写不出来来补题、或者有新感悟的时候再来看看。

注意一下 C++ 中双端队列的用法即可。


  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( n ) O(n) O(n)

C++ STL::deque 写法:

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> res;
        deque<int> dq;
        for (int i = 0; i < nums.size(); i ++ ) {
            if (dq.size() > 0 && i - dq.front() >= k) dq.pop_front();
            while (dq.size() > 0 && nums[dq.back()] <= nums[i]) dq.pop_back();
            dq.push_back(i);
            if (i >= k - 1) res.push_back(nums[dq.front()]);
        }
        return res;
    }
};

golang 写法

func maxSlidingWindow(nums []int, k int) []int {
    res, dq := []int{}, []int{}
    for i, v := range nums {
        if len(dq) > 0 && i - dq[0] >= k {
            dq = dq[1:]
        }
        for len(dq) > 0 && nums[dq[len(dq) - 1]] <= v {
            dq = dq[:len(dq) - 1]
        }
        dq = append(dq, i)

        if i >= k - 1 {
            res = append(res, nums[dq[0]])
        }
    }

    return res
}

http://www.niftyadmin.cn/n/5868405.html

相关文章

深入理解 `Sinks.Empty<Void>` 和 `Mono<Void>`:如何触发完成信号并结合 WebSocket 示例

在响应式编程中&#xff0c;Sinks 是 Project Reactor 提供的一个强大工具&#xff0c;用于手动控制数据流的信号发射。Sinks.Empty<Void> 是一种特殊的 Sinks&#xff0c;它不发射任何数据&#xff0c;仅用于表示完成或错误信号。结合 Mono<Void>&#xff0c;它可…

网络基础知识-2

N个节点完全互联的网型网即N个节点的无向完全图&#xff0c;无向完全图的边数计算如下&#xff1a;每个节点都要指向其他N-1个节点&#xff0c;但是因为无向两个节点之间的边会重复&#xff0c;因此有N(N-1)/2条边HDLC&#xff08;高级数据链路控制协议&#xff09;是一种面向比…

二叉树-左叶子之和

代码随想录-刷题笔记 404. 左叶子之和 - 力扣&#xff08;LeetCode&#xff09; 内容&#xff1a; 该题仅作为搜索&#xff0c;但是其中的规则让人摸不着头脑&#xff0c;看起来似乎很头疼 但是仔细一思考&#xff0c;能发现左叶子无非是这样的定义 当发现一个节点的 左孩…

单片机裸机编程:状态机与其他高效编程框架

在单片机裸机编程中&#xff0c;状态机是一种非常强大的工具&#xff0c;能够有效管理复杂的逻辑和任务切换。除了状态机&#xff0c;还有其他几种编程模式可以在不使用 RTOS 的情况下实现高效的程序设计。以下是一些常见的方法&#xff1a; 1. 状态机编程 状态机通过定义系统…

C语言 —— 此去经年 应是良辰好景虚设 - 函数

目录 1. 函数的概念 1.1 库函数 1.2 自定义函数 2. 形参和实参 3. return 语句 4. 数组做函数参数 5. 嵌套调用和链式访问 5.1 嵌套调用 5.2 链式访问 6. 函数的声明和定义 6.1 单个文件 6.2 多个文件 7. static 和 extern 7.1 static 修饰局部变量 7.2 static 修…

Java GC 基础知识快速回顾

目录 一、Java 垃圾回收&#xff08;GC&#xff09;基本概念和重要性分析 &#xff08;一&#xff09; Java 垃圾回收&#xff08;GC&#xff09;基本概念回顾 1.GC 三种常见语义 2.Mutator&#xff1a;应用程序的内存管理角色 3.TLAB&#xff08;线程本地分配缓存&#x…

数据结构与算法面试专题——桶排序

引入 桶排序&#xff0c;顾名思义&#xff0c;会用到“桶”&#xff0c;核心思想是将要排序的数据分到几个有序的桶里&#xff0c;每个桶里的数据再单独进行排序。桶内排完序之后&#xff0c;再把每个桶里的数据按照顺序依次取出&#xff0c;组成的序列就是有序的了。 桶排序…

关于网关和ip地址怎么理解?

互联网各领域资料分享专区(不定期更新): Sheet 正文 网关和IP地址是计算机网络中的两个核心概念,它们共同协作实现设备之间的通信。以下是通俗易懂的解释: 1. IP地址(Internet Protocol Address) 作用: IP地址是网络中设备的“唯一标识符”,类似于现实中的门牌号。它…