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

返回滑动窗口中的最大值。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sliding-window-maximum
解法一:暴力法:
解题思路:

  1. 移动窗口计算每一个窗口的最大值
  2. 将步骤1得到的值加入要返回的列表中
class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:# 暴力法时间复杂度O(Nk) 直接超出时间限制res = []if k<1 or k>len(nums):return res            left = 0right = k - 1while right<len(nums):maxval = self.maxvalue(left,right,nums)res.append(maxval)left += 1right += 1return resdef maxvalue(self,left,right,nums):maxval = nums[left]while left<=right:if maxval<nums[left]:maxval = nums[left]return maxval

解法二:单调队列法
解题思路:

  1. 如果队列最左侧索引已不在滑动窗口范围内,弹出队列最左侧索引
  2. 通过循环确保队列的最左侧索引所对应元素值最大
  3. 新元素入队
  4. 从第一个滑动窗口的末尾索引开始将最大值存储到结果res中
class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:# 边界条件if k * len(nums) == 0:return []# 优化if k == 1:return numsfrom collections import dequeq = deque()# 单调队列法:def clean_q()这个函数是精髓def clean_q(i):while q and q[0] <= i-k:q.popleft()while q and nums[q[-1]] < nums[i]:q.pop()q.append(i)res = []for i in range(k):clean_q(i)res.append(nums[q[0]])for i in range(k,len(nums)):clean_q(i)res.append(nums[q[0]])return res

滑动窗口最大值-leetcode 239题相关推荐

  1. 【LeetCode】【HOT】239. 滑动窗口最大值(双向队列)

    [LeetCode][HOT]239. 滑动窗口最大值 文章目录 [LeetCode][HOT]239. 滑动窗口最大值 package hot;import java.util.Arrays; im ...

  2. 单调区间之239.滑动窗口最大值

    单调区间 239. 滑动窗口最大值 这个题如果用普通的优先队列是有问题的,因为每次弹出去的不知道是上一个窗口的左边界还是这个窗口里的元素.我们要的是每次只弹出上一个窗口的左边界并且还能弹出最值,所以这 ...

  3. Suzy找到实习了吗Day 13 | 栈和队列结束啦 239. 滑动窗口最大值,347. 前 K 个高频元素

    day 13 239. 滑动窗口最大值 Python的Deque模块详解 solution 我复制的,好难不会写 347. 前 K 个高频元素(一刷我没有用栈,用的哈希法) solution(hash ...

  4. 代码随想录算法训练营day13 | 239. 滑动窗口最大值 | 347.前 K 个高频元素

    一.239. 滑动窗口最大值 from collections import dequeclass MyQueue: #单调队列(从大到小def __init__(self):self.queue = ...

  5. 力扣239. 滑动窗口最大值(自定义排序队列)

    239. 滑动窗口最大值 //实现功能:peek()取得队列的最大值,比最大值先添加进来的删除,后添加进来的保留 class Mydeque{Deque<Integer> deque;pu ...

  6. (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)

    目录 LeetCode150. 逆波兰表达式求值 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode239. 滑动窗口最大值 1. 思路 2. 代码实现 3. 复杂度分析 4. ...

  7. 嗯,查询滑动窗口最大值的这4种方法不错....

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 Github<小白学算法>系列:https://gith ...

  8. 你还在为查询滑动窗口最大值发愁吗?点开看最高效率解法!

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 头图 |  CSDN 下载自东方IC 本文已收录至 Github<小白学算法>系列:https://github.c ...

  9. 滑动窗口最大值的golang实现

    给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口 k 内的数字.滑动窗口每次只向右移动一位. 返回滑动窗口最大值 输入: nums = [1 ...

最新文章

  1. python3.6使用pygal模块不具交互性,图片不能显示数据
  2. es自建搜索词库_【ES从入门到实战】二十三、全文检索-ElasticSearch-分词-自定义扩展词库...
  3. python语音识别的第三方库_python标准库+内置函数+第三方库: 7.音频处理
  4. (软件工程复习核心重点)第三章需求分析-第一节:需求分析相关概念
  5. MATLAB代码: 合并两张图
  6. resttemplate 设置请求头_Jmeter信息头管理器常用的三种传参格式
  7. 数据库查询的table结果转成对应实体类
  8. 时间复杂度与空间复杂度小结
  9. 如何利用模型对大客户风险评估——信用额度进行推测
  10. 装XP的电脑运行慢与实用解决办法
  11. vue-网页Logo标题及矢量图标
  12. AT89C51中断模板(宏定义)
  13. java罗盘说明_综合罗盘各层应用说明
  14. 【C语言】字符串数组按字典升序
  15. Linux配置sendmail实现PHP发送邮件
  16. 开源工单系统 python_运维工单--服务器申请工单
  17. 前端练习 静态网页(一):导航栏
  18. java中使用Jedis操作Redis实例
  19. 软件设计 五大基本原则
  20. mysql返回-1400_mysql error 1301-1400

热门文章

  1. Android之Launcher分析和修改1——Launcher默认界面配置(default_workspace)
  2. Git之如何解决sourceTree已经pull全部下来但是本地没有更新的问题
  3. java openxml 操作 word,openxml word转成xml
  4. mysql命令去重_MySQL去重的方法整理
  5. python重定向_在Python中使用urlopen()防止“隐藏”重定向
  6. 手机浏览器html5游戏,移动浏览器都爱 HTML5 ?
  7. 豆瓣评分9分+,每一部看完不禁感慨!这里是神州大地!
  8. 左手菲尔兹右手突破奖,这个中国女婿其实是英国贵族?拿到300万奖金后他这样说……...
  9. 世界上最欢乐的职业,可能就是蹦极的工作人员了!
  10. 有图有真相!这世界上,竟有人跟你长得一模一样!