输出滑动窗口最大值(双端队列)
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
示例:
输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
输出: [3,3,5,5,6,7]
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;/*** 滑动窗口最大值*/
public class Solution {public Solution() {};/*** 遍历,暴力法* O(Nlogk)* @param nums* @param k* @return*/public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;if (n * k == 0) {return new int[0];}int[] output = new int[n - k + 1];for (int i = 0; i < n - k + 1; i++) {int max = Integer.MIN_VALUE;for (int j = i; j < i + k; j++) {max = Math.max(max, nums[j]);}output[i] = max;}return output;}/*** 双端队列* 滑动窗口作为双端队列* O(N)* @param nums* @param k* @return*/public int[] maxSlidingWindowDeque(int[] nums, int k) {int n = nums.length;if (n * k == 0) {return new int[0];}int[] output = new int[n - k + 1];Deque<Integer> window = new ArrayDeque<>();//也可以用数组模拟for (int i = 0; i < n; i++) {// 每次移动窗口时,窗口左边的元素从队列中删除if (i >= k && window.peek() <= i - k + 1) {window.remove(0);}// 新入队列元素,与队列中元素遍历比较,删除小于nums[i] 的元素while (!window.isEmpty() && nums[window.peekLast()] <= nums[i]) {window.removeLast();}window.add(i);// 队列左侧是最大值,加入结果if (i - k + 1 >= 0) {output[i - k + 1] = nums[window.peek()];}}return output;}public static void main(String[] args) {int[] aa = {3, 5, -1, 2, 8, 4};Solution ob = new Solution();int[] out = ob.maxSlidingWindowDeque(aa, 3);System.out.println(Arrays.toString(out));}
}
输出滑动窗口最大值(双端队列)相关推荐
- lintcode 滑动窗口的最大值(双端队列)
题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为 ...
- (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)
目录 LeetCode150. 逆波兰表达式求值 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode239. 滑动窗口最大值 1. 思路 2. 代码实现 3. 复杂度分析 4. ...
- 【LeetCode】【HOT】239. 滑动窗口最大值(双向队列)
[LeetCode][HOT]239. 滑动窗口最大值 文章目录 [LeetCode][HOT]239. 滑动窗口最大值 package hot;import java.util.Arrays; im ...
- leetcode 239. 滑动窗口最大值(单调队列)
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 示例 1: 输 ...
- 算法学习-单调双端队列
文章目录 基础知识 算法模板 相关题目 239.滑动窗口最大值 1438.绝对差不超过限制的最长连续子数组 862.和至少为K的最短子数组 1425.带限制的子序列和 1499.满足不等式的最大值 2 ...
- LeetCode 239. 滑动窗口最大值(双端队列+单调栈)
文章目录 1. 题目信息 2. 解题 2.1 暴力法 2.2 双端队列法 1. 题目信息 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内 ...
- leetcode59题:滑动窗口的最大值(用双端队列实现)
题目描述: 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值. 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5, ...
- [剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]
[问题描述][中等] [解答思路] 1. 暴力 复杂度分析 class MaxQueue {Queue<Integer> queue = new LinkedList();int maxV ...
- Suzy找到实习了吗Day 13 | 栈和队列结束啦 239. 滑动窗口最大值,347. 前 K 个高频元素
day 13 239. 滑动窗口最大值 Python的Deque模块详解 solution 我复制的,好难不会写 347. 前 K 个高频元素(一刷我没有用栈,用的哈希法) solution(hash ...
- 栈和队列6:滑动窗口最大值
问题描述: 题目链接: 滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. ...
最新文章
- 如何才能知道一个导师的人品?
- ISA2006实战系列之三:防火墙策略部署深度分析(附图)
- CASS 7.1 和 AutoCAD 2006的安装使用
- csdn的blog后台程序的导航菜单的实现
- MySQL String Types
- Java棘手面试问题
- 实现最小宽度的几种方法及CSS Expression
- 清除html中table标签显示的数据,遍历查看/新增/删除/获取html中table中的标签
- 为ASP.NET封装的SQL数据库访问类(转)
- slam十四讲第十讲:找不到 g2o_viewer
- 开发前奏曲之添加Android SDK平台工具
- 神经网络的参数(Weight)
- matlab中inf怎么判断,MATLAB中Inf或inf表示()、NaN或nan表示()、nargout表示()。
- 【清橙 A1206】小Z的袜子(莫队算法)
- C++产生随机数的例题:投骰子的随机游戏
- teamlab什么意思_不好意思,我们的2019毕业季聚会,和前辈的不一样
- 汇编MOVSX指令详解
- word添加水印后多出一条线的删除方法
- SAP FICO - Functional Area/ Financial Management Area(FM Area)
- C语言见缝插针游戏,见缝插针玩游戏
热门文章
- python中sorted_关于python中sorted方法的key参数
- php实现小说字典功能_PHP实现微信小程序人脸识别刷脸登录功能
- php指令,php命令行下的常用命令
- jpeg 转bmp代码_代码写得很牛逼但UI界面却搞得很丑?来,杨工带你!
- 在python中使用最小二乘法画出拟合曲线_Python基于最小二乘法实现曲线拟合示例...
- java 游戏 异步框架_基于Java的轻量级异步编程框架
- 计算机硬盘坏道解决办法
- nyoj(简单数学)Oh, my Paper!
- nyoj 买水果(组合数求法与分析)
- matlab程序中中零内插在qdpsk调制中的作用,桂林电子科技大学通信原理思考题