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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sliding-window-maximum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

答案:注意思路使用双端降序队列

//Deque双端队列
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
int len = nums.length;
int[] res = new int[len - k + 1];
//或Deque
LinkedList<Integer> queue = new LinkedList<>();
for(int i = 0; i < len; i++) {
//当最后的元素小于数组当前元素,弹出最后的元素
while(!queue.isEmpty() && nums[i] >= nums[queue.peekLast()]) {
queue.pollLast();
}
queue.addLast(i);
//当最前面的位置不在k个元素的范围时,从前面出队
//小于i-k时
if(queue.peekFirst() <= i - k) {
queue.pollFirst();
}
//当元素达到k个时,将队头元素加入数组
if(i - k + 1 >= 0) {
//加入时不出队
res[i - k + 1] = nums[queue.peekFirst()];
}
}
return res;
}
} class Solution {
/**
注意尾部头部什么时候移除、结果添加
2循环1判断
*/
public int[] maxSlidingWindow(int[] nums, int k) {
int len = nums.length;
Deque<Integer> queue = new LinkedList<>();
int[] res = new int[len - k + 1];
for(int i = 0; i < len; i++) {
//元素移除
while(!queue.isEmpty() && nums[i] >= nums[queue.peekLast()]) {
queue.pollLast();
}
//添加元素的函数
queue.offer(i);
//移除头元素,while,当头的位置不在k个区间时
while(queue.peekFirst() <= i - k) {
queue.pollFirst();
}
//添加元素到res,if,当窗口长度达到k个时,☆☆☆☆
if(i - k + 1 >= 0) {
res[i - k + 1] = nums[queue.peekFirst()];
}
}
return res;
}
}

最新文章

  1. JAVA匿名内部类
  2. windows下nodejs环境配置
  3. LYDSY模拟赛day3 平均数
  4. hash-1.hash表和hash算法
  5. [Oracle] 生产上表的列类型更新
  6. android wifi驱动移植详细过程
  7. Flex编程注意之直接获取某个组件的对象(this[]用法)通过id获取控件
  8. hdu 5675 ztr loves math(数学技巧)
  9. c# Winform Chart入门
  10. Linux网卡聚合时,其中一个网卡有两种配置的解决方法
  11. hTML 如何在不同页面上传递参数( 1 )
  12. JavaSE | IO流
  13. 拷问传统企业CIO:微服务化值得吗?
  14. Python3中PyMongo的用法
  15. doc四则运算
  16. printf中用法详解
  17. Linux下wc命令统计文件行数/词数/字符数/最长行字符数
  18. MySql(十七):MySql架构设计——高可用设计之思路及方案
  19. GNS3的使用2
  20. php 关于文件的一些封装好的函数

热门文章

  1. 【JAVA】普通IO数据拷贝次数的问题探讨
  2. Java SE 19 虚拟线程
  3. 货币转换I
  4. ERP 系统最重要的是什么?
  5. SECS半导体设备通讯-2 HSMS通信标准
  6. [CG从零开始] 3. 安装 pyassimp 库加载模型文件
  7. 小程序uni-app发起网络异步请求
  8. 洛谷P1036 [NOIP2002 普及组] 选数 (搜索)
  9. 华为云ubunbu部署.NetCore3.1项目(DDD商城)
  10. 基于vite3+tauri模拟QQ登录切换窗体|Tauri自定义拖拽|最小/大/关闭