首页 > 其他分享 >阿里技术岗位笔试&面试题:最大频率栈

阿里技术岗位笔试&面试题:最大频率栈

时间:2024-11-28 15:43:38浏览次数:4  
标签:面试题 group int 笔试 pop 阿里 频率 maxfreq freq

题目:最大频率栈。

实现 FreqStack,模拟类似栈的数据结构的操作的一个类。FreqStack 有两个函数:

  • push(int x),将整数 x 推入栈中
  • pop(),它移除并返回栈中出现最频繁的元素。如果最频繁的元素不只一个,则移除并返回最接近栈顶的元素。

◼ 示例:

  1. push [5,7,5,7,4,5]
  2. pop() -> 返回 5,因为 5 是出现频率最高的。栈变成[5,7,5,7,4]。
  3. pop() -> 返回 7,因为 5 和 7 都是频率最高的,但 7 最接近栈顶。栈变成 [5,7,5,4]。
  4. pop() -> 返回 5 。栈变成 [5,7,4]。
  5. pop() -> 返回 4 。栈变成 [5,7]。

出题人:阿里巴巴出题专家:屹平/阿里云视频云边缘计算高级技术专家

参考答案

令 freq 作为 x 的出现次数的映射 Map。

此外 maxfreq,即栈中任意元素的当前最大频率,因为我们必须弹出频率最高的元素。

当前主要的问题就变成了:在具有相同的(最大)频率的元素中,怎么判断那个元素是最新的?我们可以使用栈来查询这一信息:靠近栈顶的元素总是相对更新一些。

为此,我们令 group 作为从频率到具有该频率的元素的映射。到目前,我们已经实现了 FreqStack 的所有必要的组件。

算法:

实际上,作为实现层面上的一点细节,如果 x 的频率为 f,那么我们将获取在所有 group[i] (i <= f) 中的 x,而不仅仅是栈顶的那个。这是因为每个 group[i] 都会存储与第 i 个 x 副本相关的信息。

最后,我们仅仅需要如上所述维持 freq,group,以及 maxfreq。

参考代码*:

class FreqStack {
    Map<Integer, Integer> freq;
    Map<Integer, Stack<Integer>> group;
    int maxfreq;

    public FreqStack() {
        freq = new HashMap();
        group = new HashMap();
        maxfreq = 0;
    }
    
    public void push(int x) {
        int f = freq.getOrDefault(x, 0) + 1;
        freq.put(x, f);
        if (f > maxfreq) maxfreq = f;
        group.computeIfAbsent(f, z-> new Stack()).push(x);
    }
    
    public int pop() {
        int x = group.get(maxfreq).pop();
        freq.put(x, freq.get(x) - 1);
        if (group.get(maxfreq).size() == 0)
        maxfreq--;
        return x;
    }
}

标签:面试题,group,int,笔试,pop,阿里,频率,maxfreq,freq
From: https://www.cnblogs.com/autodriver/p/18574415

相关文章

  • 利用Java爬虫获取阿里巴巴中国站跨境属性的详细指南
    在全球化贸易的浪潮中,跨境电商正成为连接全球买家和卖家的重要桥梁。阿里巴巴中国站作为全球领先的B2B电子商务平台,提供了海量的商品信息,其中跨境属性信息对于跨境电商尤为重要。本文将详细介绍如何使用Java编写爬虫,从阿里巴巴中国站获取商品的跨境属性信息。1.跨境属性的重......
  • 如何利用Java爬虫阿里巴巴中国站获得跨境属性
    在全球化贸易日益频繁的今天,跨境电商成为了连接不同国家和地区的重要桥梁。阿里巴巴中国站作为全球知名的B2B平台,提供了海量的商品信息,其中跨境属性信息对于跨境电商尤为重要。本文将详细介绍如何使用Java编写爬虫,从阿里巴巴中国站获取商品的跨境属性信息。1.了解跨境属性......
  • 阿里通义大模型前核心员工转字节:竞业协议背后的技术人才流动
    引言在当今科技飞速发展的时代,人工智能领域竞争激烈,各大科技巨头纷纷投入大量资源研发自己的大模型,如阿里的通义大模型。这不仅是技术实力的象征,更关乎企业在未来科技格局中的地位。而阿里通义大模型前核心员工加入字节跳动这一事件值得重视,竞业协议在其中的纠葛反映出技......
  • 前端面试题-1(详解事件循环)
    1.了解浏览器的进程模型1.什么是进程?程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。2.什么是线程?有了进程后,就可以运行程序的代码了。我们可以理解为操作程序的'人'就是线......
  • 测试面试题总结
    功能抓包APPUI自动化项目:项目流程,如何排期测试流程,项目周期项目流程中的问题介绍项目核心功能,如何设计用例熟悉或最近的项目,业务功能,和负责部分,如何进行测试业务测试除了功能上还有其他方面的逻辑测试吗项目最近发版时间开发技术评审发现了什么问题开发逻辑讲......
  • ASP.NET Core面试题汇总
    1.如何在controller中注入service?在configservices方法中配置这个service。在controller的构造函数中,添加这个依赖注入。 2.ASP.NETCore比ASP.NET更具优势的地方是什么?跨平台,ASP.NETCore可以运行在Windows、Linux和MAC系统上;对框架本安装没有依赖,所有依赖都跟......
  • 跨阿里云账号迁移RDS实例‍
    跨阿里云账号迁移RDS实例......
  • 新型大语言模型的预训练与后训练范式,阿里Qwen
    前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内的完整流程。后训练通常涵盖监督指导微调和对齐过程,而这些在ChatGPT的推广下变得广为......
  • 面试题精选14-数据库中如何实现行锁和表锁
    行锁(RowLock)SQLSERVER行锁是在数据行层面上实施的锁定。当你对特定的行执行操作时,SQLServer通常会自动使用行锁来确保数据的一致性和隔离性。使用事务并指定隔离级别:在事务中使用适当的隔离级别可以使SQLServer在需要时使用行锁。BEGINTRANSACTION;SETTRANSACTION......
  • Hadoop面试题总结
    1.1、介绍Hadoop广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。狭义上说,Hadoop指Apache这款开源框架,它的核心组件有:(1)、HDFS(分布式文件系统):解决海量数据存储(2)、YARN(作业调度和集群资源管理的框架):解决资源任务调度(3)、MAPREDUCE(分布式运算编程框架):解决海量......