剑指 Offer 59 - I. 滑动窗口的最大值

Offer_59_1

题目详情

方法一:暴力方法+双指针

package com.walegarrett.offer;

/**
* @Author WaleGarrett
* @Date 2021/2/12 18:06
*/ import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList; /**
* 题目详情:给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。
*/ /**
* 方法一:暴力法 + 左右指针
*/
public class Offer_59_1 {
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums == null || nums.length==0)
return new int[0];
int len = nums.length;
int[] result = new int[len-k+1];
int cnt = 0;
for(int l=0,r=k-1;r<len;l++,r++){
int max=-0x3f3f3f3f;
for(int i=l;i<=r;i++){
max = Math.max(max, nums[i]);
}
result[cnt++] = max;
}
return result;
}
}

方法二:使用双端队列

/**
* 方法二:使用双端队列维护滑动窗口的最大值
*/
class Offer_59_1_2 {
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums == null || nums.length==0)
return new int[0];
int len = nums.length;
int[] result = new int[len-k+1];
Deque<Integer> deque = new LinkedList<>();
for(int l=1-k,r=0;r<len;l++,r++){
if(l>0 && deque.peekFirst() == nums[l-1])
deque.pollFirst();//删除窗口左边的元素
while(!deque.isEmpty() && deque.peekLast()<nums[r]){
deque.pollLast();//保持deque递减
}
deque.addLast(nums[r]);
if(l>=0)
result[l] = deque.peekFirst();
}
return result;
}
}

参考题解:面试题59 - I. 滑动窗口的最大值(单调队列,清晰图解)

剑指 Offer 59 - I. 滑动窗口的最大值 + 双指针 + 双端队列的更多相关文章

  1. 力扣 - 剑指 Offer 59 - I. 滑动窗口的最大值

    题目 剑指 Offer 59 - I. 滑动窗口的最大值 思路1(单调队列) 使用单调(递减)队列,保持队列中的元素是递减顺序,队列头保存的是当前窗口中最大的元素 首先先模拟建立第一个窗口,同时获取第 ...

  2. 剑指offer 面试题. 滑动窗口的最大值

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

  3. 剑指offer系列38----滑动窗口的最大值(不懂????????????????????????????????????????????????)

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

  4. 【剑指offer】59 - I. 滑动窗口的最大值

    剑指 Offer 59 - I. 滑动窗口的最大值 知识点:队列:滑动窗口:单调 题目描述 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值. 示例 输入: nums = [ ...

  5. 剑指 Offer 59 - II. 队列的最大值--滑动窗口的建模+Deque的基本使用(常用方法)

    剑指 Offer 59 - II. 队列的最大值 题目链接 package com.walegarrett; /** * @Author WaleGarrett * @Date 2020/12/3 1 ...

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

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

  7. 《剑指offer》面试题59 - I. 滑动窗口的最大值

    问题描述 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值. 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5 ...

  8. 剑指offer-面试题59_1-滑动窗口的最大值-数组

    /* 题目: 链接:https://www.nowcoder.com/questionTerminal/1624bc35a45c42c0bc17d17fa0cba788 来源:牛客网 给定一个数组和滑 ...

  9. 剑指Offer 59. 按之字形顺序打印二叉树 (二叉树)

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题目地址 https://www.nowco ...

随机推荐

  1. POJ2785 4 Values whose Sum is 0 (二分)

    题意:给你四组长度为\(n\)序列,从每个序列中选一个数出来,使得四个数字之和等于\(0\),问由多少种组成情况(仅于元素的所在位置有关). 题解:\(n\)最大可以取4000,直接暴力肯定是不行的, ...

  2. Nginx location相关配置说明

    Nginx location相关配置说明       基于不同的IP.不同的端口以及不用得域名实现不同的虚拟主机,依赖于核心模块ngx_http_core_module实现. 新建PC web站点 [ ...

  3. Lightoj 1038 - Race to 1 Again【期望+dp】

    题目:戳这里 题意:一个数字n不断迭代地除以自身的因子得到1.求这个过程中操作除法次数的期望. 解题思路: 求概率基本都是从一个最基础的状态开始延伸推出公式,得出答案.因为每个数都有个共同的最终状态1 ...

  4. Spring(三) Spring IOC

    Spring 核心之 IOC 容器 再谈 IOC 与 DI IOC(Inversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创 建.依赖的代码,反转给容器 ...

  5. JavaScript Engine 可视化

    JavaScript Engine 可视化 图解 JavaScript Engine JavaScript 可视化 (7 部曲) ️ JavaScript Visualized: Event Loop

  6. React Hooks: useImperativeHandle All In One

    React Hooks: useImperativeHandle All In One useImperativeHandle https://reactjs.org/docs/hooks-refer ...

  7. MDN Browser Compatibility Report 2020

    MDN Browser Compatibility Report 2020 top pain point https://mdn-web-dna.s3-us-west-2.amazonaws.com/ ...

  8. img & srcset

    img & srcset 性能优化 <img class="fn tj s t u fa ai ht" width="3700" height=& ...

  9. free online business card generator

    free online business card generator 免费在线名片生成器 https://www.logaster.cn/business-card/ https://www.chu ...

  10. ws & websocket & 掉线重连

    ws & websocket & 掉线重连 reconnecting websocket https://github.com/joewalnes/reconnecting-webso ...