栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode

题目描述

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回滑动窗口中的最大值。

代码实现
class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int length = nums.length;
        int[] a = new int[length-k+1];
        int[] q = new int[length];
        int hh=0,tt=-1;
        for(int i = 0 ; i < nums.length;i++){
            //判断队头是否划出窗口 i-k+1表示的是
            if(hh<=tt && q[hh] < i-k+1) hh++;
            //保持队列单调递减 如果当前值大于队尾,则剔出队尾的值,
            while(hh<=tt && nums[i] > nums[q[tt]]) tt--;
            //新元素插入到队尾
            q[++tt] = i;
            //赋值
            if(i>=k-1) a[i-k+1] = nums[q[hh]];
        }
        return a;
    }
}
思路分析

核心
维护单调队列

代码解析
if(hh<=tt && q[hh] < i-k+1) hh++;

while(hh<=tt && nums[i] > nums[q[tt]]) tt–;

q[++tt] = i;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301963.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号