62、滑动窗口的最大值
一、题目
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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、滑动窗口的最大值相关推荐
- java 滑动窗口_【Java】 剑指offer(59-1) 滑动窗口的最大值
本文参考自<剑指offer>一书,代码采用Java语言. 题目 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如,如果输入数组{2, 3, 4, 2, 6, 2, 5, 1 ...
- lintcode 滑动窗口的最大值(双端队列)
题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为 ...
- 《剑指offer》-- 序列化二叉树、二叉搜索树的第k个节点、数据流中的中位数、滑动窗口的最大值
一.序列化二叉树: 1.题目: 请实现两个函数,分别用来序列化和反序列化二叉树. 2.解题思路: (1)根据前序遍历规则完成序列化与反序列化.所谓序列化指的是遍历二叉树为字符串:所谓反序列化指的是依据 ...
- 牛客题霸 [滑动窗口的最大值] C++题解/答案
牛客题霸 [滑动窗口的最大值] C++题解/答案 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一 ...
- 面试题59 - I. 滑动窗口的最大值/239. 滑动窗口最大值
2020-05-11 1.题目描述 滑动窗口的最大值 2.题解 使用双端队列维护一个递减的队列 3.代码 class Solution { public:vector<int> maxSl ...
- (笔试题)滑动窗口的最大值
题目: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值. 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6 ...
- 【LeetCode】剑指 Offer 59 - I. 滑动窗口的最大值
[LeetCode]剑指 Offer 59 - I. 滑动窗口的最大值 文章目录 [LeetCode]剑指 Offer 59 - I. 滑动窗口的最大值 package offer;import ja ...
- 剑指offer:滑动窗口的最大值(栈和队列)
1. 题目描述 /*给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{ ...
- 【重点】剑指offer——面试题65:滑动窗口的最大值
剑指offer--面试题65:滑动窗口的最大值 Solution1: 笨蛋方法啊.. class Solution { public:vector<int> maxInWindows(co ...
最新文章
- python显示当前时间
- 与计算机硬件相关的英语作文,计算机和计算硬件,computer and computing hardware,音标,读音,翻译,英文例句,英语词典...
- SAP Batch Management 批次主数据中classification视图中GR Date没有被更新?
- WCF - Versus Web Service
- STM32开发 -- L3GD20H陀螺仪开发详解
- c++ 预处理命令 #define用法
- JavaSE知识点个人总结(不断更新)
- Flash 检测摄像头是否被占用
- 英国大学diploma(证书)期末考试挂科
- 二进制编辑器BZ-1621网址
- PHP留言并展示_php留言簿功能实现
- 【Android 学习】之二维码扫描开发(闪光灯功能)
- 第三届蓝桥杯B组 C/C++取球游戏
- GBase产品学习-GBase 8s中查看数据库
- 【fpga】gtx/gth概述
- 域名——host配置
- 刘志军为什么能一手遮天
- 常见的SEO工具有哪些
- 机械硬盘选购指南——从选购经历谈起
- 即简单又漂亮的思维导图怎样绘制
热门文章
- asp mysql 连接字符串,在ASP中连接数据库(连接字符串)
- idea for mac 控制台 mvn command not found
- TreeMap实现排序
- 硬件:笔记本电脑7大分类总结,看完你就明白了!
- 全面了解HTTP和HTTPS(开发人员必备)
- JS关闭浏览器 (不弹出提示框)
- python3.4 pip安装_python3.4的pycurl pip安装
- 线性代数及其应用_线性代数入门——行列式的简单应用选讲
- linux中profile文件作用,解析Linux系统中bashrc和profile文件的作用区别
- 顺德机器人应用与维修专业收入_保定万维科技技校专业课程巡礼——计算机应用与维修...