生成滑动窗口的最大值数组

package com.chanmufeng.codingInterviewGuide.stackAndQueue_10;

import java.util.LinkedList;

/**
 * 生成窗口的最大值数组
 */
public class MaxWindow {
    /**
     * @param arr 给定数组
     * @param w   窗口长度
     * @return
     */
    public static int[] getMaxWindow(int[] arr, int w) {
        if (arr == null || arr.length < w || w < 1) {
            return null;
        }

        int len = arr.length;
        int[] res = new int[len - w + 1];
        LinkedList<Integer> qmax = new LinkedList<>();
        int index = 0;
        for (int i = 0; i < len; i++) {
            while (!qmax.isEmpty() && arr[i] >= arr[qmax.peekLast()]) {
                qmax.pollLast();
            }
            qmax.addLast(i);

            if (qmax.peekFirst() == i - w) {
                qmax.pollFirst();
            }

            if (i - w + 1 >= 0) {
                res[index++] = arr[qmax.peekFirst()];
            }
        }
        return res;
    }

    public static void main(String[] args) {
        int[] arr = new int[]{4, 3, 5, 4, 3, 3, 6, 7};
        int[] res = getMaxWindow(arr, 3);
        for (int item : res) {
            System.out.print(item + " ");
        }
    }
}

全部评论

相关推荐

2024-11-20 18:25
安徽大学 Java
点赞 评论 收藏
分享
2024-11-28 22:27
已编辑
西南交通大学 Java
Kensley:交大的学弟,整体挺好的 稍微有点乱可以考虑做减法了 并发和java可以合一起,知识上补充一下Redis集群技术的死角,主从,Sentinel,Cluster。 大计基改成课程就行:《计算机网络》《操作系统原理》《数据结构》《算法》。 最重要的,项目还要再挖掘,要用【问题/场景】驱动开发,效果放在最后一句就行,“基于XXX/集成XXX实现XXX功能,【解决XXX问题】,效果XXX”,比如基于Redis实现商品信息的读缓存,解决了浏览高峰时因高频访问MySQL偶发卡顿的问题,体感性能上升30% 排版相关的:1. 大段文本要做提炼,比如“XXX等有基本的了解”改为“了解XXX”,文本相关都可以喂给GPT看看精简效果;2.黑体粗有点多,长文本和奖项的加粗去掉,奖项的时间不用列;3. 项目和实习的时间挪到后面,保持一致
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务