描述

给定一个长度为 n 的数组 num 和滑动窗口的大小 size ,找出所有滑动窗口里数值的最大值。

例如,如果输入数组{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]}。

窗口大于数组长度或窗口长度为0的时候,返回空。

数据范围: 1≤n≤10000,0≤size≤10000,数组中每个元素的值满足 ∣val∣≤10000

要求:空间复杂度 O(n),时间复杂度 O(n)

示例1

输入:[2,3,4,2,6,2,5,1],3

返回值:[4,4,6,6,6,5]

示例2

输入:[9,10,9,-7,-3,8,2,-6],5

返回值:[10,10,9,8]

示例3

输入:[1,2,3,4],5

返回值:[]

解法1:不使用队列与双指针

首先返回不符条件的值

创建一个list用于保存窗口最大值

使用双重for循环,利用Math函数判断每个窗口最大值并保存到list中

最后返回

import java.util.*;
public class Solution {public ArrayList<Integer> maxInWindows(int [] num, int size) {if(num.length == 0 ||num.length < size || size == 0){return new ArrayList<Integer>();}ArrayList list = new ArrayList<Integer>();int max = -1;for(int i = 0; i < num.length; i++){max = num[i];for(int j = 1; j < size; j++){if((j+i)<num.length)max = Math.max(max,num[j+i]);}if(i<num.length-size+1)list.add(max);}return list;}
}

解法2:使用双指针

import java.util.*;
public class Solution {public ArrayList<Integer> maxInWindows(int [] num, int size) {ArrayList<Integer> list = new ArrayList<>();if(size <= 0|| size > num.length)return list;int left = 0;int right = size - 1;while(right<num.length){list.add(getMax(num,left,right));left++;right++;}return list;}public int getMax(int[] num,int left,int right){if(num.length==0 || left<0 || right>num.length)return -1;int max = Integer.MIN_VALUE;for(int i = left;i <= right;i++){max = max > num[i] ? max : num[i];}return max;}
}

解法3:使用队列

import java.util.*;
public class Solution {public ArrayList<Integer> maxInWindows(int [] num, int size) {ArrayList<Integer> list=new ArrayList<>();if(num==null||num.length==0|| num.length<size||size==0){return list;}ArrayDeque<Integer>deque=new ArrayDeque<>();for (int i=0;i<size;i++){while (!deque.isEmpty()&&num[i]>=num[deque.peekLast()]){deque.pollLast();}deque.addLast(i);}for (int i=size;i<num.length;i++){list.add(num[deque.peekFirst()]);while (!deque.isEmpty()&&num[i]>=num[deque.peekLast()]){deque.pollLast();}if (!deque.isEmpty()&&i- deque.peekFirst()>=size){deque.pollFirst();}deque.addLast(i);}list.add(num[deque.peekFirst()]);return list;}
}

JZ59 滑动窗口的最大值,三种解法【较难】相关推荐

  1. 滑动窗口的最大值java

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

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

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

  3. 62、滑动窗口的最大值

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

  4. 【LeetCode】1. 盛最多水的容器:C#三种解法

    题目:https://leetcode-cn.com/problems/container-with-most-water/ 盛最多水的容器 难度:中等 给你 n 个非负整数 a1,a2,...,an ...

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

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

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

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

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

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

  8. [简单题]自定义取余(三种解法)C++实现

    题目链接: 点击打开原题链接 题目意思,就是标题意思. 第一种解法:(加法迭代)用加法来模拟这个(17行代码) int mod256WithoutMod(int number) {if (number ...

  9. jsp判断字符串相等_最长回文字符串三种解法

    先解释一下什么是回文字符串,比如说字符串"aba",无论是从先往后读取还是从后往前读取,结果都是一样的.当给定很长的字符串时,如何快速获取到最长的回文字符串,这也是大厂比较常见的算 ...

最新文章

  1. 【深入Cocos2d-x】探索Cocos2d-x中的内存管理-引用计数和自动释放池
  2. 2021年科研学术海报Poster模板
  3. unsigned int mysql_mysql 中int类型字段unsigned和signed的探索
  4. java 生成随机数_Java 生成随机数的 N 种方法
  5. android 坐标绘图 缩放,在缩放/缩小或拖放到Android后获取画布坐标
  6. python中eval函数调用_如何从Python exec()/eval()调用中获取结果?
  7. dubbo学习总结三 消费端
  8. fread 单独测试没有问题 在正式项目里面丢数据 可能是系统资源不足 预读出了问题
  9. 如何使用Jmeter对WebSocket进行压力测试
  10. jquery读写cookie
  11. 计算机上已安装某个第三方应用程序,防止电脑第三方软件“被”安装 3招彻底屏蔽不明软件...
  12. hexutil加解密_EncodeUtil(各种格式的编码解码工具类)
  13. 有必要考国二mysql_国二证有用吗
  14. MATLAB符号运算——积分
  15. 【Java实现】南京地铁导航系统的简单实现(三)—— 图形化界面的设计
  16. VAD自适应算法降噪控制毕业论文【matlab】
  17. 用ps做个一寸的照片
  18. [超详细] Git 远程仓库及回滚日志操作
  19. 智能链杀机器人 芬shib,慈善回流是怎样的合约部署原理?
  20. ifconfig命令找不到

热门文章

  1. 分布式游戏服务器全服匹配玩法设计
  2. 二阶三阶四阶魔方旋转公式
  3. 超五类屏蔽双绞线和计算机电缆区别,五类线、六类线、超五类线的定义和区别...
  4. 杭电OJ 1248 不死族巫妖王 完全背包问题 字节跳动 研发岗编程原题
  5. 扎心!为什么有的人,干什么都能成功
  6. 计算机系学生推荐电脑游戏本,有什么学生笔记本电脑推荐 学生笔记本电脑推荐...
  7. 模板类中 typename的用法,以及函数的定义和声明
  8. android rom 慢,安卓系统运行慢怎么办
  9. 找到第一个不重复的字符
  10. Java大佬是怎样炼成的1-2