day13 栈与队列

2023-10-27

LeetCode 239 力扣

* 维护一个单调队列

* 入队列时,保证单调递减(可以将小于待入队的数全部移除)

* 出队列,如果不是队首出(最大元素),无需处理

package algor.trainingcamp;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @author lizhe
 * @version 1.0
 * @description: TODO
 * @date 2023/4/18 08:21
 *
 */
public class LeetCode239_RE {
    public int[] maxSlidingWindow(int[] nums, int k) {
        if(null == nums){
            return nums;
        }

        int size = nums.length - k + 1;
        int[] res = new int[size];
        int idx = 0;

        //先将前k个元素放入队列
        MySimpleQueue queue = new MySimpleQueue();
        for(int i = 0;i < k;i++){
            queue.add(nums[i]);
        }
        //前k个元素产生一个最大值
        res[idx++] = queue.peek();

        //从k到nums.length - 1进行队列的出入
        /**
         * 出: nums[i - k]
         * 入: nums[i]
         */
        for(int i = k;i < nums.length;i++){
            queue.poll(nums[i - k]);
            queue.add(nums[i]);
            res[idx++] = queue.peek();
        }

        return res;
    }
}

/**
 * 维护一个单调队列
 * 1、插入时,维护单调递减即可 eg: 4,2 如果需要插入3 可以将小于3的值全部移除
 * 2. 删除时,如果不是最大的值,无需删除
 * 3. peek 找到队列顶部即可
 */
class MySimpleQueue {
    Deque<Integer> queue = new LinkedList<>();

    /**
     * 插入元素时,将小于待插入元素的数据全部移除
     */
    public void add(int val){
        while(!queue.isEmpty() && val > queue.getLast()){
            queue.removeLast();
        }

        queue.add(val);
    }

    /**
     * 弹出元素
     * 如果发现队列不为空 且 value等于最大值 才需要弹出
     */
    public void poll(int value){
        if(!queue.isEmpty() && value == queue.peek()){
            queue.poll();
        }
    }

    public int peek(){
        return queue.peek();
    }
}

LeetCode 347 力扣

* TOPK 先记录下单词的频次,再使用最小堆处理

package algor.trainingcamp;

import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Set;

/**
 * @author lizhe
 * @version 1.0
 * @description: 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
 * @date 2023/4/17 08:04
 *
 * 1. 统计出现频率
 * 2. 构建小顶堆(小顶堆每次弹出都是堆顶的元素),留下了最大的N个数
 * 3. 每次进行小顶堆出堆 直到剩下N个数
 */
public class LeetCode347 {
    public int[] topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int num : nums){
            map.put(num, map.getOrDefault(num, 0) + 1);
        }

        Set<Map.Entry<Integer, Integer>> entries = map.entrySet();
        //默认小顶堆
        PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<>((o1, o2) -> o1.getValue() - o2.getValue());

        for (Map.Entry<Integer, Integer> entry : entries) {
            queue.offer(entry);

            if(queue.size() > k){
                queue.poll();
            }
        }

        int[] res = new int[k];
        for(int i = k - 1;i >= 0;i--){
            res[i] = queue.poll().getKey();
        }

        return res;
    }

    public static void main(String[] args) {
        LeetCode347 demo = new LeetCode347();
        demo.topKFrequent(new int[]{1,1,1,2,2,3}, 2);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

day13 栈与队列 的相关文章

随机推荐

  • 组合预测模型

    组合预测模型 LSTM XGBoost长短期记忆神经网络结合极限梯度提升树时间序列预测 Matlab程序 目录 组合预测模型 LSTM XGBoost长短期记忆神经网络结合极限梯度提升树时间序列预测 Matlab程序 预测结果 评价指标 基
  • Oracle not in查不到应有的结果(NULL、IN、EXISTS详解)

    http x spirit iteye com blog 615603 首先我要感谢aa和Liu Xing帮我发现了我日志中的错误 之前比较粗心 把3条SQL语句写成一样的了 对于给读者造成的麻烦 我深表抱歉 今天我把原文做了修订 为了对得
  • vue中 Error in mounted hook: "TypeError: __WEBPACK_IMPORTED_MODULE_0__assets_swiper_js__.default is n...

    个人小站点 https sundjly github io 在vue的项目中出现了以下错误 Error in mounted hook TypeError WEBPACK IMPORTED MODULE 0 assets swiper js
  • **vue.esm.js?efeb:591 [Vue warn]: Invalid prop: type check failed for prop "data". Expected Array

    vue esm js efeb 591 Vue warn Invalid prop type check failed for prop data Expected Array got String 有可能是这几种情况
  • Centos7 使用yum命令安装软件失败,报错"Couldn't open file /media/cdrom/repodata/repomd.xml"

    今天使用CentOS7安装docker的时候 安装失败 报错 yum install docker 已加载插件 fastestmirror langpacks file media cdrom repodata repomd xml Err
  • day13 栈与队列

    LeetCode 239 力扣 维护一个单调队列 入队列时 保证单调递减 可以将小于待入队的数全部移除 出队列 如果不是队首出 最大元素 无需处理 package algor trainingcamp import java util De
  • i love you 浪漫字体复制_七夕

    七夕情人节来临之际 朋友圈早已被各种代购刷屏 你啥都不送 让你女朋友七夕的时候在朋友圈炫耀什么 扫一扫进七夕保命群 教你七夕买什么送女友才能保命 你男朋友是不是以为你缺氧 所以每个节日都送你空气 不得不承认他们一个个都是被代购事业耽误的网络
  • 偏微分方程 基础知识(线性偏微分方程+常系数线性偏微分方程)

    偏微分方程 指含有多元未知函数 u u x x
  • 互联网晚报

    今日看点 哪吒汽车第10万台量产车下线 仅用42个月 2022年首家银行理财子公司 浦银理财正式开业 京东成全国首批支持第三方商家接入数字人民币的企业 亚虹医药在科创板挂牌上市 A股迎来 泌尿生殖肿瘤第一股 刘慈欣 三体 英文版权以125万
  • 聚观早报

    聚观365 9月14日消息 iPhone 15系列正式发布 月饼专利申请超10000项 五个女博士 自建研究院 2023中国民营企业研发十强公布 华为和小米达成全球专利交叉许可协议 iPhone 15系列正式发布 2023年苹果秋季新品发布
  • 极光笔记

    作者 极光推送后台技术专家 曾振波 为什么要上云 关于企业上云 业内已经有了非常多的讨论和论述 这里主要是从极光自身的实际情况阐述几个理由 1 传统自建机房在扩充底层软硬件资源时 需要进行选型 采购 参数测试验证 实施部署等流程 整个过程需
  • 介绍Flex UI 测试工具:FlexMonkey

    相信许多人都知道Flex的单元测试工具 FlexUnit或者ASUnit 但是对于UI测试工具可能很少有人了解 那么目前有什么FlexUI测试工具呢 答案是FlexMonkey FlexMonkey是一个Flex应用的测试框架 他可以提供对
  • C++执行程序的过程

    C 执行程序的过程 C 的源程序是以 cpp作为后缀的 C语言则是 c cpp保存也可以兼容 为了使计算机能够执行高级语言的代码 必须对源程序做个处理 用编译器把源程序处理成计算机可以识别的二进制目标程序 一般目标程序的后缀为 obj 编译
  • 函数重载、函数覆盖以及函数隐藏

    函数重载 是指允许存在多个同名函数 而这些函数的参数表不同 或许参数个数不同 或许参数类型不同 或者两者都不相同 函数重载是发生在同一个类中 调用时 根据参数的不同进行调用 同时编译器在编译期间就确定了要调用的函数 或者说这是一种早期绑定
  • 技术、产业、人才三管齐下,数字人民币渐行渐近

    摘要 产业动态 Roxe与Fairexpay达成战略合作 拓展印度汇款业务 自治区级区块链 桂链 发布启动并全面接入 星火 链网 云南省区块链和数字科技标准化技术委员会获批成立 福建省高校首个产教融合区块链联合实验室揭牌 国网电商公司创新探
  • openwrt python_Openwrt python,openwrt上使用Python

    需要安装libffi python mini python libffi以及python mini需要安装在python之前 wget c http downloads openwrt org cn backfire 10 03 1 brc
  • VMware Workstation 不可恢复错误: (vmx)

    errors VMware Workstation 不可恢复错误 vmx Exception 0xc0000006 disk error while paging has occurred 日志文件位于 K vmware centos vm
  • 多功能翻译工具:全球翻译、润色和摘要生成

    openai translator openai translator Stars 18 1k License AGPL 3 0 这个项目是一个多功能翻译工具 由 OpenAI 提供支持 可以进行全球单词翻译 单词润色和摘要生成等操作 提供
  • 微信网页开发调用微信jssdk接口遇到的坑以及最终解决方法 (持续更新)

    1 微信网页开发调用jssdk时报permission denied 大致是两个原因 1 首先注册时未将你所调用的接口名字添加至jsApiList 2 第二个就是你的这个公众号没有权限使用这个api 例如在开发环境中的微信页面就无法调取这个
  • 数据隐私、AI 交互和知识管理:DB-GPT 的综合解决方案

    python telegram bot python telegram bot Stars 22 9k License GPL 3 0 这个项目是一个提供纯 Python 异步接口的 Telegram Bot API 库 它与 Python