当前位置: 首页 > article >正文

代码随想录算法训练营DAY13 | 栈与队列 (3)

一、LeetCode 239 滑动窗口最大值

题目链接:239.滑动窗口最大值icon-default.png?t=N7T8https://leetcode.cn/problems/sliding-window-maximum/

思路:使用单调队列,只保存窗口中可能存在的最大值,从而降低时间复杂度。

public class MyQueue{
    Deque<Integer> queue = new LinkedList<>();
    //弹出元素时,判断要窗口弹出的数值是否等于队列出口的数值
    void poll(int val){
        if(!queue.isEmpty() && val == queue.peek()){
            queue.poll();
        }
    }
    //添加元素时,判断要添加的元素是否大于队列入口处的元素
    //如果大于,就将入口处元素弹出,保证队列单调递减
    void offer(int val){
        while(!queue.isEmpty() && val > queue.getLast()){
            queue.removeLast();
        }
        queue.offer(val);
    }
    //栈顶始终为最大值
    int peek(){
        return queue.peek();
    }
}
class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if(nums.length == 1){
            return nums;
        }
        int len = nums.length - k + 1;
        int[] ans = new int[len];
        int index = 0;
        MyQueue queue = new MyQueue();
        //先把前k个元素入队
        for(int i = 0; i < k; i++){
            queue.offer(nums[i]);
        }
        //记录前k个元素中的最大值
        ans[index++] = queue.peek();

        for(int i = k; i < nums.length; i++){
            //弹出 + 入队
            queue.poll(nums[i-k]);
            queue.offer(nums[i]);
            //记录每组窗口的最大值
            ans[index++] = queue.peek();
        }

        return ans;
    }
}

 二、LeetCode 347 前k个高频元素

        暂不更新


http://www.kler.cn/a/228780.html

相关文章:

  • 【蓝桥杯选拔赛真题62】C++求和 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
  • 【部署】将项目部署到云服务器
  • 简历_使用 Redis 解决集群模式下的 Session 共享问题,使用拦截器实现用户的登录,校验和权限刷新以及对单位时间内请求频繁的用户IP地址进行限流。
  • RabbitMQ基础篇
  • vscode 设置
  • Linux 管道操作
  • Matlab:利用1D-CNN(一维卷积神经网络),分析高光谱曲线数据或时序数据
  • 从编程中理解:大脑的成瘾行为
  • 神经网络激活函数到底是什么?
  • Log360,引入全新安全与风险管理功能,助力企业积极抵御网络威胁
  • 前端的事件代理
  • 【C++】I/O多路转接详解(二)
  • ReactNative实现弧形拖动条
  • 十年炒股心得
  • UI自动化中元素无法定位问题解决方法
  • @ResponseBody
  • idea中找到所有的TODO
  • 【计算机网络】物理层概述|通信基础|奈氏准则|香农定理|信道复用技术
  • 使用PHPStudy搭建本地web网站并实现任意浏览器公网访问
  • 第八届:世界3D渲染挑战赛《无尽阶梯》正式开启
  • QT 的 blockSignals(true) 的作用范围
  • error: failed to push some refs to....
  • 基于Vue2用keydown、setTimeout事件实现连续按键(连击)任意键(或组合键)3秒触发自定义事件(以F1键为例)
  • 分享62个节日PPT,总有一款适合您
  • 2024最新最详细【接口测试总结】
  • 2024年第一篇博客