首页 > 编程语言 >力扣239(Java)- 滑动窗口最大值(困难)

力扣239(Java)- 滑动窗口最大值(困难)

时间:2023-05-25 10:46:54浏览次数:47  
标签:queue Java nums int 最大值 力扣 239 滑动 窗口

题目:

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

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

示例 1:

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

示例 2:

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

提示:

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

来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

第一次做,做不出来,但是看了:代码随想录视频讲解 和 评论区题解

 1 class Solution {
 2     public int[] maxSlidingWindow(int[] nums, int k) {
 3         //定义一个双端队列
 4         Deque<Integer> queue = new ArrayDeque<>();
 5         //定义一个结果数组,实际运算一下就知道长度的表达式
 6         //1,2,3,4,5, k= 2,有4个最大值
 7         int[] ans = new int[nums.length - k + 1];
 8         int index = 0;
 9         for (int i = 0; i < nums.length; i++){
10             //如果加入的数值大于队列尾部的数值,则将队列尾部的数值弹出直到满足大到小的顺序
11             while (!queue.isEmpty() && nums[i] > nums[queue.peekLast()] ){
12                 queue.pollLast();
13             }
14             //再将当前元素下标加入到队列中
15             queue.offerLast(i);
16             //判断队列出口的下标在不在窗口范围内
17             //不在则弹出队首
18             if (queue.peekFirst() < i - k + 1){
19                 queue.pollFirst();
20             }
21             //将最大值加入ans中
22             //满足窗口大小
23             if (i + 1 >= k){
24                 ans[index++] = nums[queue.peekFirst()];
25             }
26         }
27         return ans;
28     }
29 }

 

标签:queue,Java,nums,int,最大值,力扣,239,滑动,窗口
From: https://www.cnblogs.com/liu-myu/p/17430448.html

相关文章

  • java基本原理及三大框架原理和数据库基本知识点总结
    这个也是超详细的,自己遇到的问题,然后总结下来的,有查的和自己理解的,很多点,对于做javaweb开发的同学很有帮助。笔记如下:1、面向对象的特征有哪些方面1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选......
  • java 通过String关键词 和 String对象创建字符串 耗时对比
    importjava.util.ArrayList;importjava.util.Vector;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){longstartTime=System.currentTimeMillis();for(inti=0;i<5000000;i++){Strings1="he......
  • 三路快排Java版(带思路分析)
    快速排序这里我们直接开始讲相对的最优解带随机数的三路快排好了,中间还有很多版本的快排,但是都有一些问题导致在某种极端情况下造成耗费时间极多。基础快排:在序列本身有序的情况下复杂度为O(n²)带随机数的快排:在序列本身有序的情况下复杂度为O(nlogn),但是在序列全部元素相同......
  • Cannot run program “G:\Java\bin\java.exe“ (in directory “C:\compile-serve
    今夜拾起两年前早已遗忘的java踌躇满志打开idea发现早已物是人非他报错了,然鹅并没有解决,解决方法我把Structure里多余的jdk删掉,只剩下jdk1.8,如图,就解决了......
  • java易错题锦集系列五
    接口中不能有构造方法,抽象类中可以有。抽象类中构造方法作用:初始化抽象类的成员;为继承它的子类使用定义在同一个包(package)内的类是可以不经过import而直接相互使用final修饰的方法可以被重载但不能被重写从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行......
  • java易错题锦集四
    effectivejava不要再构造方法中启动任何线程g=newGameServer();g.start();构造器无返回值,但是不能void修饰字符串String是包装类型吗?答案:不是对应的基本类型和包装类如下表:基本数据类型包装类byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLon......
  • java易错题锦集二
    源码补码inti=5;intj=10;System.out.println(i+~j);有个公式,-n=~n+1另一种解题思路~代表对n按位取反10的源码是:0000000000000000000000001010所以对10按位取反就是1111111111111111111111110101由于计算机中-1表示为1111111111111111111111111111显然......
  • MQTT入门DEMO(Java语言)
    目录快速开始准备下载及安装第一次安装EMQX第一次运行EMQX客户端代码快速开始准备MQTT简介EMQX简介下载及安装第一次安装EMQX版本选择EMQX支持多种操作系统,请选择合适您的版本下载。下载地址:https://www.emqx.io/cn/downloads#broker在MicrosoftWindows下安装目前EMQX......
  • java输出乘法口诀
    importjava.util.StringTokenizer;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){for(inti=1;i<9;i++){for(intj=1;j<=i;j++){System.out.print(j+"*"+i+"=&q......
  • JAVA-两个日期比较大小
    packagecom.swift.ksv5;importjava.util.Date;importcn.hutool.core.date.DateUnit;importcn.hutool.core.date.DateUtil;publicclassAPP2{publicstaticvoidmain(String[]args){StringdateStr1="2023-03-01";//上......