【LeetCode每日一题:895.最大频率栈~~~Map+栈】

news2024/11/26 4:48:46

题目描述

设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。

实现 FreqStack 类:

FreqStack() 构造一个空的堆栈。
void push(int val) 将一个整数 val 压入栈顶。
int pop() 删除并返回堆栈中出现频率最高的元素。
如果出现频率最高的元素不只一个,则移除并返回最接近栈顶的元素。

示例 1:

输入:
[“FreqStack”,“push”,“push”,“push”,“push”,“push”,“push”,“pop”,“pop”,“pop”,“pop”],
[[],[5],[7],[5],[7],[4],[5],[],[],[],[]]
输出:[null,null,null,null,null,null,null,5,7,5,4]
解释:
FreqStack = new FreqStack();
freqStack.push (5);//堆栈为 [5]
freqStack.push (7);//堆栈是 [5,7]
freqStack.push (5);//堆栈是 [5,7,5]
freqStack.push (7);//堆栈是 [5,7,5,7]
freqStack.push (4);//堆栈是 [5,7,5,7,4]
freqStack.push (5);//堆栈是 [5,7,5,7,4,5]
freqStack.pop ();//返回 5 ,因为 5 出现频率最高。堆栈变成 [5,7,5,7,4]。
freqStack.pop ();//返回 7 ,因为 5 和 7 出现频率最高,但7最接近顶部。堆栈变成 [5,7,5,4]。
freqStack.pop ();//返回 5 ,因为 5 出现频率最高。堆栈变成 [5,7,4]。
freqStack.pop ();//返回 4 ,因为 4, 5 和 7 出现频率最高,但 4 是最接近顶部的。堆栈变成 [5,7]。

提示:

0 <= val <= 109
push 和 pop 的操作数不大于 2 * 104。
输入保证在调用 pop 之前堆栈中至少有一个元素。

求解思路

  1. 这道题目通过栈+Map结构来实现。
  2. 核心思路就是:元素词频表统计每个元素出现的次数,栈集合维护每个频率下的元素。
  3. 详细过程注释到了代码中,请结合代码理解。

实现代码

class FreqStack {
    //元素词频表
    private HashMap<Integer,Integer> map;
    //维护每一个频率次数下的栈
    private List<ArrayDeque<Integer>> stacks;

    public FreqStack() {
        map=new HashMap<>();
        stacks=new ArrayList<>();
    }
    
    public void push(int val) {
        // 返回每一个元素出现的次数
        int cnt=map.getOrDefault(val,0);
        // 如果当前位置的元素出现了多次,频率发生了改变,就新维护一个cnt次数下的元素栈
        if(cnt==stacks.size()){
            stacks.add(new ArrayDeque<>());
        }
        // 返回cnt次数位置下的栈,并添加元素
        stacks.get(cnt).push(val);
        // 更新元素词频表
        map.put(val,cnt+1);
    }
    
    public int pop() {
        // 因为我们维护的集合就是从左到右频率递增的,栈中的元素就是靠近栈顶的
        int right=stacks.size()-1;
        // 按照题目要求返回频率最高且最靠经栈顶的
        int value=stacks.get(right).pop();
        // 如果最后一个栈返回元素后为空 直接移除掉
        if(stacks.get(right).isEmpty()){
            stacks.remove(right);
        }
        // 更新元素词频表
        map.put(value,map.get(value)-1);
        // 返回结果
        return value;
    }
}

/**
 * Your FreqStack object will be instantiated and called as such:
 * FreqStack obj = new FreqStack();
 * obj.push(val);
 * int param_2 = obj.pop();
 */

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计Django的酒店预订系统设计与实现

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

深度学习快速入门----Pytorch 系列3

注&#xff1a;参考B站‘小土堆’视频教程 视频链接&#xff1a;【PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】 系列文章&#xff1a; 深度学习快速入门----Pytorch 系列1 深度学习快速入门----Pytorch 系列2 深度学习快速入门--…

[附源码]计算机毕业设计JAVA小区供暖收费管理系统

[附源码]计算机毕业设计JAVA小区供暖收费管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

世界杯小组赛频繁爆冷?这或许是强队的谋略 一分钟带你了解2022卡塔尔世界杯赛制

今年的世界杯你赚到钱了吗&#xff1f; 我们这里所说的世界杯是指世界杯决赛圈&#xff0c;也被叫做世界杯正赛。参赛队伍是已经通过世界杯预选赛选拔出的的32支队伍&#xff08;除了东道主卡塔尔自动晋级&#xff09;。 世界杯中没有皇马、巴萨、曼联&#xff0c;这些都是俱乐…

基于 SpringBoot + MyBatis 的网页版五子棋对战

目录 一、项目所要实现的功能模块 1、用户模块 2、匹配模块 3、对战模块 二、使用技术 三、项目截图 1、登录页面 2、注册页面 3、游戏大厅页面 4、游戏房间页面 四、创建 SpringBoot 项目 1、在 IDEA 中创建一个 SpringBoot 项目 2、设置项目名称 3、选择项目依…

第2-4-9章 规则引擎Drools实战(2)-信用卡申请

文章目录9.2 信用卡申请9.2.1 计算规则9.2.2 实现步骤9.2 信用卡申请 全套代码及资料全部完整提供&#xff0c;点此处下载 本小节我们需要通过Drools规则引擎来根据规则进行申请人的合法性检查&#xff0c;检查通过后再根据规则确定信用卡额度&#xff0c;最终页面效果如下&a…

浅谈架构备考.补缺.V1

2022.11.28 可靠性分析 to repair to failure between failure 平均故障间隔时间。平均故障间隔时间&#xff08;Mean Time Between Failure&#xff0c;MTBF&#xff09;常常与 MTTF 发生混淆。 因为两次故障&#xff08;失败&#xff09;之间必然有修复行为&#xff0c;因…

SpringBoot主启动类使用@ComponentScans、@ComponentScan扫描组件类,注意避坑

前言&#xff1a; 1、大家都知道&#xff0c;Springboot主启动加载会默认扫描同级包目录下所有的组件类、配置类&#xff0c;然后进行解析注入到Spring容器中。SpringBootApplication 是个联合注解&#xff0c;里面包含了 ComponentScan 组件扫描注解&#xff0c;所以我们不需要…

沉睡者IT - 什么是NFT?

欢迎关注沉睡者IT&#xff0c;点上面关注我 ↑ ↑ NFT&#xff0c;全称为Non-Fungible Token&#xff0c;指非同质化通证&#xff0c;实质是区块链网络里具有唯一性特点的可信数字权益凭证&#xff0c;是一种可在区块链上记录和处理多维、复杂属性的数据对象。 以上是百度百科…

MongoBd 离线安装与管理

背景&#xff1a; 鉴于内部网络原因&#xff0c;可能一个简单的操作变得复杂化&#xff0c;现在就Mongodb的离线安装分享本人的操作经验: 材料&#xff1a; 操作系统&#xff1a;centos7.6 MongoDB(主程序) : mongodb-linux-x86_64-rhel70-6.0.1.tgz 下载地址&#xff1a;下载…

传输层协议 —— UDP

目录 一、端口号的划分范围 二、认识知名端口号 三、两个问题 四、nestat和pidof命令 五、UDP协议 1. UDP首部格式 2. UDP的特点 3. 面向数据报 4. UDP的缓冲区 5. UDP使用注意事项 6. 基于UDP的应用层协议 一、端口号的划分范围 端口号的长度是16位&#xff0c;因此…

博途PLC和MATLAB矩阵运算存储方法对比

MATLBA不用多说,号称矩阵实验室可想而知在MATLAB里对矩阵的存储、运算非常简单、高效。如下图简单定义一个5*3的矩阵 1、rand(5*3) 上面利用rand()函数简单的实现了内存矩阵存储空间分配+附随机初值,下面我们看下博途里的矩阵定义存储方法。 BP神经网络PID算法的PLC实现过程…

量表如何分析?

一、什么是量表 量表是一种测量工具&#xff0c;通常用来测量人们的主观态度、意见或价值观念。我们经常会在问卷中使用量表对调查对象进行测量&#xff0c;最常见到的就是李克特量表。 ‍1、定义&#xff1a;李克特量表 李克特量表是最常用的量表&#xff0c;是由美国社会心…

基于AD Event日志检测LSASS凭证窃取攻击

01、简介 简单介绍一下&#xff0c;LSASS(本地安全机构子系统服务)在本地或域中登录Windows时&#xff0c;用户生成的各种凭证将会存储在LSASS进程的内存中&#xff0c;以便用户不必每次访问系统时重新登录。 攻击者在获得起始攻击点后&#xff0c;需要获取目标主机上的相关凭证…

AutoCAD Electrical 2022—项目特性

当绘图的过程中如果弹出上面的对话框&#xff0c;就是库和图标菜单途径不对造成的&#xff1b; 点击浏览找到正确的位置或点击默认设置恢复默认的路径&#xff1b; 元件对应原理图的设置&#xff1b; 标记格式&#xff1a;放置元件的代号的格式&#xff1b; 线号&#xff1a;编…

iphone怎么传数据到另一个手机,苹果如何转移数据到新手机,两台iphone怎么同步所有数据

换新手机后&#xff0c;需要迁移旧苹果手机的数据到新苹果手机里面&#xff0c;那么&#xff0c;iphone怎么传数据到另一个手机&#xff1f;本篇文章带您深度了解苹果手机的数据传输技巧。 方法一、通过“快速开始”传输数据 苹果手机如何数据传输&#xff1f;我记得之前换 iP…

【JUC】信号量Semaphore详解

前言 大家应该都用过synchronized 关键字加锁&#xff0c;用来保证某个时刻只允许一个线程运行。那么如果控制某个时刻允许指定数量的线程执行&#xff0c;有什么好的办法呢? 答案就是JUC提供的信号量Semaphore。 介绍和使用 Semaphore&#xff08;信号量&#xff09;可以用…

Servlet API 表白墙

Servlet API 详解 主要三个: 1.HttpServlet 2.HttpServletRequest 3.HttpServletResponse 1.HttpServlet 方法名称 调用时机 init 在 HttpServlet 实例化之后被调用一次 destroy 在 HttpServlet 实例不再使用的时候调用一次 service 收到 HTTP 请求的时候调用 …

vue开发测评系统思路及踩坑

最近公司做了一个测评系统&#xff0c;因为时间很短&#xff0c;本以为会很简单&#xff0c;没有想到踩了很多坑。 先看下部分效果图吧 然后在说下需求 1&#xff1a;所有的答案都是动态的&#xff08;例如选择是出来的是第二题&#xff0c;选择否出来的是第五题&#xff09…

【Linux】文件权限的理解

不用心做一件事情&#xff0c;你永远不知道自己有多么的强大&#xff01; 文章目录一、shell命令以及运行原理(centos7下&#xff0c;shell为命令行解释器bash)1. 什么是shell(Kernel外层的软件层)&#xff1f;2. shell的交互方式存在意义3. windows GUI对比Linux shell(都是Ke…