滑动窗口最大值【子串】【滑动窗口】【双端队列】

news/2024/5/20 7:57:24 标签: 滑动窗口, 双端队列

Problem: 239. 滑动窗口最大值

文章目录

  • 思路 & 解题方法
  • 复杂度
  • Code

思路 & 解题方法

实在是太太太太巧妙了!定义一个双端队列,然后存储下标,存储进去每一个数的下标时,都需要将现在有的数且小于当前的数字都去掉,因为它们更小且在前面就没有任何意义了,这样做还能使得双端队列最前面一直都是表示的当前窗口中最大的数字的下标。

复杂度

时间复杂度:

添加时间复杂度, 示例: O ( n ) O(n) O(n)

空间复杂度:

添加空间复杂度, 示例: O ( n ) O(n) O(n)

Code

class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        q = deque()
        ans = []
        for i, x in enumerate(nums):
            # 入,入之前要把它之前所有比他小的数字都出队,因为前面小的数都没有意义了
            while q and nums[q[-1]] < x:
                q.pop()
            q.append(i)
            # 出,如果最前面的数字在区间之外,就出队
            if i - q[0] >= k:
                q.popleft()
            # 记录答案,只需要在k-1之后再记录,因为前面不够区间长度
            if i >= k - 1:
                ans.append(nums[q[0]])
        return ans

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

相关文章

32.virtual reality system concepts illustrated using OSVR

32.1 Common Space This section describes the spaces needed to support viewing and interacting with the virtual world. 本节介绍支持查看虚拟世界并与之交互所需的空间。 The spaces required for supporting viewing and interacting with a virtual world can vary …

mysql四大引擎、账号管理以及建库

目录 一.数据库存储引擎1.1存储引擎的查看1.2InnoDB1.3MyISAM1.4 MEMORY1.5 Archive 二.数据库管理2.1元数据库分类2.2 操作2.3 MySQL库 三.数据表管理3.1三大范式3.2 整形3.3 实数3.4 字符串3.5 text&blob3.6 日期类型3.7 选中标识符 四.数据库账号管理4.1 查询用户4.2查看…

【教学类-09-04】20240102《游戏棋N*N》数字填写,制作棋子和骰子

作品展示 背景需求&#xff1a; 最近在清理学具材料库&#xff0c;找到一套1年多前的《N*N游戏棋》&#xff0c;把没有用完的棋盘拿出来&#xff0c;&#xff0c;想给大4班换花样&#xff0c;并把它们用掉。 程序代码在这里 【教学类-09-03】20221120《游戏棋10*10数字如何直接…

Springboot整合Flowable Modeler(flowable6.4.0)

文章目录 Springboot整合Flowable Modeler1 项目准备1.1 新建一个Springboot项目1.2 项目的pom文件1.3 Flowable Modeler UI下载2 后端代码2.1 复制代码2.2 代码修改2.3 新增代码3 启动项目Springboot整合Flowable Modeler 1 项目准备 1.1 新建一个Springboot项目 ​ Spring…

软件测试|什么是Python构造方法,构造方法如何使用?

构造方法&#xff08;Constructor&#xff09;是面向对象编程中的重要概念&#xff0c;它在创建对象时用于初始化对象的实例变量。在Python中&#xff0c;构造方法是通过特殊的名称__init__()来定义的。本文将介绍Python构造方法的基本概念、语法和用法。 什么是构造方法&…

针对CSP-J/S的冲刺练习:Day 3 小结

一、顺序搜索算法 顺序搜索算法是一种简单直观的搜索算法。它通过逐个比较待搜索元素和数组中的元素&#xff0c;在找到匹配的元素或遍历完整个数组后返回结果。实现该算法的 C 代码如下&#xff1a; int sequentialSearch(int arr[], int n, int key) {for(int i 0; i <…

【面试高频算法解析】算法练习6 广度优先搜索

前言 本专栏旨在通过分类学习算法&#xff0c;使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目&#xff0c;帮助您深度理解每种算法&#xff0c;避免出现刷了很多算法题&#xff0c;还是一知半解的状态 专栏导航 二分查找回溯&#xff08;Backtracking&…

223.【2023年华为OD机试真题(C卷)】小华最多能得到多少克黄金(优先搜索DFS-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-小华最多能得到多少克黄金二.解题思路三.题解代…