文章目录

  • 1理解题目
  • 2 思路
    • 2.1暴力求解
    • 2.2双端队列

1理解题目

输入:整数数组nums,滑动窗口大小k
输出:整数数组
规则:在一个窗口内只能看到k个数,找一个最大的数,添加到返回数组中。每次滑动向右滑动一步。

Input: nums = [1,3,-1,-3,5,3,6,7], k = 3
Output: [3,3,5,5,6,7]
Explanation:
Window position Max


[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 思路

2.1暴力求解

只能想到暴力的思路。每次窗口范围内比较k个元素大小。所以时间复杂度是O(nk)。

class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums==null || nums.length==0) return null;if(k==0) return nums;int n = nums.length;int[] r = new int[n-k+1];for(int i=0;i<n-k+1;i++){r[i] = nums[i];for(int j=i;j<i+k;j++){r[i] = Math.max(r[i],nums[j]);}}return r;}}

2.2双端队列

看了力扣官方解释想起来了,当时做的时候确实蒙圈。

队列是一个双端队列。队列中存放的是当前窗口内的k个元素的下标。注意这里不存元素,存下标。队列头部的元素是窗口范围内,最大值元素的下标。例如:nums=[1,3,-1,-3,5,3,6,7] ,在{-1,-3,5}这个窗口范围内,队列头部存放的元素值是4。队列尾部存放的元素是当前窗口内最大值元素的下标。最大值是5,下标是4。
每次添加下标为i的元素的时候:
1 检查队列头部元素是不是等于i-k。是,就删除。
2 不断拿nums[i]与队尾元素比较。如果nums[i]>nums[队尾元素],则删除队尾元素,在队尾插入i。否则不做任何操作。
队列中元素的nums值是不断递减的。

class Solution {private ArrayDeque<Integer> deq = new ArrayDeque<Integer>();private int[] nums;private int k;public int[] maxSlidingWindow(int[] nums, int k) {if(nums==null || nums.length==0) return null;if(k==0) return nums;int n = nums.length;this.nums = nums;this.k = k;int[] r = new int[n-k+1];deq = new ArrayDeque<Integer>();for(int i=0;i<k;i++){add(i);}r[0] = nums[deq.getFirst()];for(int i=k;i<n;i++){add(i);r[i-k+1] = nums[deq.getFirst()];}return r;}private void add(int i){if(!deq.isEmpty() && deq.getFirst()==i-k){deq.removeFirst();}while(!deq.isEmpty() && nums[deq.getLast()]<nums[i]){deq.removeLast();}deq.addLast(i);}
}

239. Sliding Window Maximum相关推荐

  1. LeetCode 239. Sliding Window Maximum

    原题链接在这里:https://leetcode.com/problems/sliding-window-maximum/ 题目: Given an array nums, there is a sl ...

  2. 239 Sliding Window Maximum 滑动窗口最大值

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

  3. leetcode 239. Sliding Window Maximum | 239. 滑动窗口最大值(单调栈,窗口内最大最小值更新结构)

    题目 https://leetcode.com/problems/sliding-window-maximum/ 题解 窗口内最大最小值更新结构,单调栈问题,左神视频讲过,<程序员算法面试指南& ...

  4. Sliding Window Maximum

    题目 Sliding Window Maximum A long array A[] is given to you. There is a sliding window of size w whic ...

  5. LeetCode 滑动窗口(Sliding Window)类问题总结

    导语 滑动窗口类问题是面试当中的高频题,问题本身其实并不复杂,但是实现起来细节思考非常的多,想着想着可能因为变量变化,指针移动等等问题,导致程序反复删来改去,有思路,但是程序写不出是这类问题最大的障碍 ...

  6. python实现滑动窗口平均_数据流滑动窗口平均值 · sliding window average from data stream...

    [抄题]: 给出一串整数流和窗口大小,计算滑动窗口中所有整数的平均值. MovingAverage m = new MovingAverage(3); m.next(1) = 1 // 返回 1.00 ...

  7. [Swift]LeetCode480. 滑动窗口中位数 | Sliding Window Median

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. POJ 2823 Sliding Window

    Sliding Window 链接:http://poj.org/problem?id=2823 Time Limit: 12000MS   Memory Limit: 65536K       Ca ...

  9. 【POJ - 2823】 Sliding Window(单调队列 用双端队列实现或模拟队列)

    题干: An array of size n ≤ 10 6 is given to you. There is a sliding window of size k which is moving f ...

最新文章

  1. C:/WINDOWS/system32/x 病毒分析和解决建议
  2. spi flash偶尔出现写入错误的情况
  3. [导入]ASP.NET 2.0 读取配置文件[INI](示例代码下载)
  4. # POJ-1979(BFS)
  5. VS与SVN的交互VisualSVN
  6. python列表类型用什么表示_python内置类型:列表,包括 list 和 tuple
  7. Django框架实现支付宝第三方支付
  8. java折半查找简述_折半查找(java版)
  9. 大学生体测成绩判断c语言_体育改革瞄准高校,体测不过关可能真的毕不了业了...
  10. Android FancyCoverFlow的使用实现图片画廊形式的呈现
  11. Airbnb搜索:Embedding表示学习
  12. msvcrt.dll故障模块 explorer.exe_辽阳专业的风冷热泵模块机组厂
  13. 方法重写和重载的规则
  14. 读《显微镜下的大明》马伯庸---笔记
  15. android,java知识点总结 (二)
  16. 论文写不下去时怎么办?
  17. Modelsim搭建具有各组件的UVM验证平台
  18. RTX 3090 与 Tesla P40与 Tesla M40 深度学习训练速度比较
  19. 搭建个人网盘-owncloud
  20. 学计算机用商务本还是游戏本,工作学习游戏?这 8 款最具性价比的笔记本电脑,总有一款适合你...

热门文章

  1. python函数-装饰器
  2. CentOS7.0安装Nginx 1.7.4
  3. UVA455 - Periodic Strings
  4. 移动端REM布局方案
  5. 作业3(学习进度表)【第四周】
  6. Plist文件和字典转模型
  7. mysql往前一天同一时间_Mysql时间轴数据 获取同一天数据的前三条
  8. define 字符串_C++如何使用define关键字以便使用中文编程?
  9. skywalking 引起 spring-cloud-gateway 的内存溢出 skywalking的bug
  10. android 监听webView滑动距离和标题栏颜色渐变