一、题目

给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。

二、解法

 1 package algorithm7;
 2
 3 import java.util.ArrayList;
 4 import java.util.LinkedList;
 5 //使用双端队列
 6 /*
 7  对新来的元素k,将其与双端队列中的元素相比较
 8  *     1)前面比k小的,直接移出队列(因为不再可能成为后面滑动窗口的最大值了!),
 9  *     2)前面比k大的X,比较两者下标,判断X是否已不在窗口之内,不在了,直接移出队列
10  *     队列的第一个元素是滑动窗口中的最大值*/
11 public class MaxInWindows64 {
12     public static void main(String[] args) {
13         int[] num = {2,3,4,2,6,2,5};
14         ArrayList<Integer> res = maxInWindows(num,3);
15         for(int i : res){
16             System.out.print(i + " ");
17         }
18     }
19     public static ArrayList<Integer> maxInWindows(int [] num, int size){
20         ArrayList<Integer> res = new ArrayList<>();
21         if(size == 0 || size > num.length)
22             return res;
23         int begin;
24         LinkedList<Integer> q = new LinkedList<>();
25         //先将前size-1个数中的符合条件的值 加入双端队列中
26         for(int i = 0; i < size - 1; i++){
27             while(!q.isEmpty() && num[i] > num[q.getLast()]){
28                 q.removeLast();
29             }
30             q.addLast(i);
31         }
32         for(int i = size-1; i < num.length; i++){
33             while(!q.isEmpty() && num[i] > num[q.getLast()]){
34                 q.removeLast();
35             }
36             q.addLast(i);
37             if(i-q.getFirst()+1 > size)
38                 q.removeFirst();
39             res.add(num[q.getFirst()]);
40         }
41         return res;
42     }
43 }

转载于:https://www.cnblogs.com/fankongkong/p/7462165.html

62、滑动窗口的最大值相关推荐

  1. java 滑动窗口_【Java】 剑指offer(59-1) 滑动窗口的最大值

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如,如果输入数组{2, 3, 4, 2, 6, 2, 5, 1 ...

  2. lintcode 滑动窗口的最大值(双端队列)

    题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为  ...

  3. 《剑指offer》-- 序列化二叉树、二叉搜索树的第k个节点、数据流中的中位数、滑动窗口的最大值

    一.序列化二叉树: 1.题目: 请实现两个函数,分别用来序列化和反序列化二叉树. 2.解题思路: (1)根据前序遍历规则完成序列化与反序列化.所谓序列化指的是遍历二叉树为字符串:所谓反序列化指的是依据 ...

  4. 牛客题霸 [滑动窗口的最大值] C++题解/答案

    牛客题霸 [滑动窗口的最大值] C++题解/答案 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一 ...

  5. 面试题59 - I. 滑动窗口的最大值/239. 滑动窗口最大值

    2020-05-11 1.题目描述 滑动窗口的最大值 2.题解 使用双端队列维护一个递减的队列 3.代码 class Solution { public:vector<int> maxSl ...

  6. (笔试题)滑动窗口的最大值

    题目: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值. 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6 ...

  7. 【LeetCode】剑指 Offer 59 - I. 滑动窗口的最大值

    [LeetCode]剑指 Offer 59 - I. 滑动窗口的最大值 文章目录 [LeetCode]剑指 Offer 59 - I. 滑动窗口的最大值 package offer;import ja ...

  8. 剑指offer:滑动窗口的最大值(栈和队列)

    1. 题目描述 /*给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{ ...

  9. 【重点】剑指offer——面试题65:滑动窗口的最大值

    剑指offer--面试题65:滑动窗口的最大值 Solution1: 笨蛋方法啊.. class Solution { public:vector<int> maxInWindows(co ...

最新文章

  1. python显示当前时间
  2. 与计算机硬件相关的英语作文,计算机和计算硬件,computer and computing hardware,音标,读音,翻译,英文例句,英语词典...
  3. SAP Batch Management 批次主数据中classification视图中GR Date没有被更新?
  4. WCF - Versus Web Service
  5. STM32开发 -- L3GD20H陀螺仪开发详解
  6. c++ 预处理命令 #define用法
  7. JavaSE知识点个人总结(不断更新)
  8. Flash 检测摄像头是否被占用
  9. 英国大学diploma(证书)期末考试挂科
  10. 二进制编辑器BZ-1621网址
  11. PHP留言并展示_php留言簿功能实现
  12. 【Android 学习】之二维码扫描开发(闪光灯功能)
  13. 第三届蓝桥杯B组 C/C++取球游戏
  14. GBase产品学习-GBase 8s中查看数据库
  15. 【fpga】gtx/gth概述
  16. 域名——host配置
  17. 刘志军为什么能一手遮天
  18. 常见的SEO工具有哪些
  19. 机械硬盘选购指南——从选购经历谈起
  20. 即简单又漂亮的思维导图怎样绘制

热门文章

  1. asp mysql 连接字符串,在ASP中连接数据库(连接字符串)
  2. idea for mac 控制台 mvn command not found
  3. TreeMap实现排序
  4. 硬件:笔记本电脑7大分类总结,看完你就明白了!
  5. 全面了解HTTP和HTTPS(开发人员必备)
  6. JS关闭浏览器 (不弹出提示框)
  7. python3.4 pip安装_python3.4的pycurl pip安装
  8. 线性代数及其应用_线性代数入门——行列式的简单应用选讲
  9. linux中profile文件作用,解析Linux系统中bashrc和profile文件的作用区别
  10. 顺德机器人应用与维修专业收入_保定万维科技技校专业课程巡礼——计算机应用与维修...