当前位置: 首页 > news >正文

239.滑动窗口的最大值

题目:

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值 

示例 1:

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       3
 1 [3  -1  -3] 5  3  6  7       3
 1  3 [-1  -3  5] 3  6  7       5
 1  3  -1 [-3  5  3] 6  7       5
 1  3  -1  -3 [5  3  6] 7       6
 1  3  -1  -3  5 [3  6  7]      7

示例 2:

输入:nums = [1], k = 1
输出:[1]

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104
  • 1 <= k <= nums.length

解题思路:

使用双端队列,如果队列头部索引值不在当前的窗口内就将数据出队,移除队列尾部所有比当前元素小的索引,保持队列递减,然后将当前索引加入队列,当遍历到第k个元素及之后时,每次循环将队列头部索引对应的元素值加入结果列表。

代码:

from collections import deque

class Solution:
    def maxSlidingWindow(self, nums, k: int):
        if not nums:
            return []
        if k==1:
            return nums
                
        dq = deque()
        length = len(nums)
        results = []
        for i in range(length):
            while dq and dq[0]<i-k+1:
                dq.popleft()
            while dq and nums[i]>nums[dq[-1]]:
                dq.pop()
            dq.append(i)
            if i>=k-1:
                results.append(nums[dq[0]])
        return results

相关文章:

  • Power Apps 技术分享:连接SharePoint列表数据源
  • AI大模型完全指南:从核心原理到行业落地实践
  • 《MATLAB定位与滤波例程》专栏目录,持续更新……
  • 出海独立开发者如何利用Backlink提升产品曝光与流量
  • Netty基础—6.Netty实现RPC服务三
  • C++模版(复习)
  • 第15章:ConvNeXt图像分类实战:遥感场景分类【包含本地网页部署、迁移学习】
  • java实现二叉树的深度优先遍历
  • Neo4j 图数据库教程
  • HashMap源码解读
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Restful的出现,背景和进化,矛盾与取舍
  • 深入理解传输层协议
  • 计算机网络-扩展
  • 【MySQL基础-8】MySQL条件查询详解:高效筛选数据的艺术
  • 群体智能优化算法-旗鱼优化算法 (Sailfish Optimizer, SFO,含Matlab源代码)
  • 大模型的参数数量与学习的知识数量之间
  • Linux系统移植篇(二)Uboot 顶层 Makefile 解析
  • 小测验——根据内参计算一对RGB-D图像对应的点云
  • 计算机二级Python资料
  • Git 常用命令指南
  • 西安发布最新通知公告/seo排名赚app官网
  • 新区网站建设/seo专员是干什么的
  • 如何做好专业类网站/自己开平台怎么弄啊
  • 淅川微网站建设/深圳网络推广公司哪家好
  • 迅速建设企业网站/推广网站大全
  • 政府网站建设 讲话/广告投放平台系统