【秋招笔试-试读版-支持在线评测】8.28华为秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试

💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历

✨ 本系列打算持续跟新 春秋招笔试题

👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸

✨ 华为专栏传送🚪 -> 🧷华为春秋招笔试

在这里插入图片描述

目前今年秋招的笔试已经全面上线OJ啦!!!

已经订阅专栏的小伙伴可以联系我解锁评测权限

OJ使用相关请戳:OJ使用相关

alt

🌈 华为秋招笔试,来啦!!!

🍥 华子本次题目没有ex的模拟题和阅读理解题,整体难度不大

1️⃣ 简单的栈模拟

2️⃣ 哈希表+同余,这个知识点在秋招的笔试中频繁出现,建议大家好好掌握

3️⃣ 经典的优先队列优化贪心的问题

✨ 01.LYA的排队难题 评测链接🔗

问题描述

LYA是一家热门咖啡店的店长。由于店铺空间有限,顾客需要在一条狭窄的走廊里排队等候。这条走廊的特点是只能容纳一个人进出,而且遵循"后进先出"的原则。每位顾客都有一个独特的号码牌,从1开始递增。

有趣的是,有些顾客可能会因为各种原因(如接电话、忘记带钱包等)暂时离开队伍,然后再次回来排队。当走廊已经排满时,新来的顾客就无法进入。

现在,LYA想要预测顾客们最终离开咖啡店的顺序。她记录了顾客们进入走廊的顺序,包括那些离开后又回来的顾客。假设最后走廊是满的,LYA希望你能帮她计算出顾客们离开的顺序。

输入格式

输入为一行数字,数字之间用空格分隔。每个数字代表一位顾客的号码牌。数字可能重复出现,表示该顾客曾离开又重新排队。

输出格式

输出为一行数字,数字之间用空格分隔,表示顾客离开咖啡店的顺序。

样例输入1

1 2 3 2 3 4 5

样例输出1

3 2 5 4 3 2 1

样例解释1

顾客2和3曾经离开队伍又重新排队。最终,走廊里的顾客从里到外的顺序是1、2、3、4、5。因此,离开的顺序是5、4、3、2、1。

样例输入2

1 1 2 3 4 4 5

样例输出2

1 4 5 4 3 2 1

样例解释2

顾客1和4曾经离开队伍又重新排队。顾客1第一次进入后立即离开,然后重新排队。顾客4进入后,又离开并重新排队。最终,走廊里的顾客从里到外的顺序是1、2、3、4、5。因此,离开的顺序是5、4、3、2、1,但由于1和4曾经提前离开,所以它们的顺序会出现在最终序列的前面。

数据范围

  • 输入序列长度不超过10000
  • 顾客号码范围为 [ 1 , 10000 ] [1, 10000] [1,10000]

题解

栈模拟

模拟整个排队和离开的过程:

  1. 使用一个栈来表示走廊,栈底代表走廊最里面,栈顶代表走廊入口。
  2. 使用一个集合来记录当前在走廊中的顾客。
  3. 遍历输入序列:
    • 如果当前顾客不在走廊中,将其加入栈和集合。
    • 如果当前顾客已在走廊中,说明他曾离开又回来。这时需要将他和他之后进入的顾客都移出走廊,然后再将他重新加入。
  4. 最后,栈中剩余的顾客就是最终的离开顺序。

时间复杂度: O ( n ) O(n) O(n),其中 n n n 是输入序列的长度。
空间复杂度: O ( n ) O(n) O(n),用于存储栈和集合。

参考代码

🔒订阅专栏解锁参考代码以及评测功能 → \to 🧷华为春秋招笔试

🎵 02.音乐总监LYA 评测链接🔗

问题描述

LYA是一家音乐电台的节目总监。她正在为一档新的音乐节目安排歌曲播放顺序。节目中有多首歌曲需要播放,每首歌曲都有一个独特的编号。LYA想要设计一个特殊的播放规则,使得听众能够享受到有规律的音乐体验。

规则如下:

  1. 从播放列表中选择一首歌曲作为起点。
  2. 从起点开始,每隔固定间隔选择一首歌曲。
  3. 如果选中的歌曲编号存在于播放列表中,则将其从列表中移除(视为已播放)。
  4. 重复步骤2和3,直到无法再选择歌曲。

LYA希望找到一个最佳的起点,使得能够播放最多的歌曲。如果有多个起点可以播放相同数量的歌曲,她想要选择编号最小的那个。

输入格式

第一行包含一个正整数 n n n,表示播放列表中歌曲的数量。

第二行包含 n n n 个空格分隔的正整数,表示播放列表中每首歌曲的编号。

第三行包含一个正整数 i n t e r v a l interval interval,表示选择歌曲的固定间隔。

输出格式

输出一个整数,表示最佳起点歌曲的编号。

样例输入

6
4 5 7 1 1 2
3

样例输出

1

样例输入

5
4 5 7 1 2
50

样例输出

1

数据范围

  • 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105
  • 0 ≤ 0 \leq 0 歌曲编号 ≤ 1 0 8 \leq 10^8 108
  • 0 ≤ i n t e r v a l ≤ 1 0 5 0 \leq interval \leq 10^5 0interval105

题解

哈希表求同余

这道题目本质上是在寻找一个最优的起点,使得按照给定的间隔选择歌曲时,能够移除最多的歌曲。

一个直观的解法是,对于每个可能的起点,都模拟一遍选歌过程,记录能移除的歌曲数量,然后选择移除数量最多且编号最小的起点。但这种方法的时间复杂度是 O ( n 2 ) O(n^2) O(n2),对于大规模的输入数据会超时。

更高效的解法是利用同余的性质。观察到,对于任意起点 x x x,它能选中的歌曲编号满足 $x + k \cdot interval $,其中 y y y 是播放列表中的歌曲编号, k k k 是非负整数,将其对 k k k 取模后 恒等于 x x x

基于这个观察,可以采用以下步骤:

  1. 使用哈希表记录每个歌曲编号出现的次数。
  2. 对于每个可能的余数 r r r 0 ≤ r < i n t e r v a l 0 \leq r < interval 0r<interval),计算能选中多少歌曲。
  3. 在步骤2中,同时记录每个余数对应的最小起点。
  4. 选择能选中最多歌曲的余数,并输出其对应的最小起点。

这种方法的时间复杂度是 O ( n + i n t e r v a l ) O(n + interval) O(n+interval),空间复杂度是 O ( n ) O(n) O(n)。对于给定的数据范围,这个解法是可以接受的。

参考代码

🔒订阅专栏解锁参考代码以及评测功能 → \to 🧷华为春秋招笔试

🌈 03.LYA的艺术展览计划 评测链接🔗

问题描述

LYA是一位著名的艺术策展人,她正在为即将到来的艺术季制定参观计划。艺术季共有 n n n 个展览,编号从 0 0 0 n − 1 n-1 n1。每个展览 i i i 的开放时间为 [ s t a r t i , e n d i ] [start_i, end_i] [starti,endi],即从第 s t a r t i start_i starti 天开始到第 e n d i end_i endi 天结束,包括首尾两天。

由于LYA的工作繁忙,她每天最多只能参观 k k k 个展览。她希望在不影响工作的情况下,参观尽可能多的展览。值得注意的是,LYA不需要全程参与一个展览,只要在展览开放期间的任意一天参观即可。

请帮助LYA计算她最多能参观多少个展览。

输入格式

第一行包含两个整数 n n n k k k,分别表示展览的数量和LYA每天最多可以参观的展览数量。

接下来的 n n n 行,每行包含两个整数 s t a r t i start_i starti e n d i end_i endi,表示第 i i i 个展览的开放时间。

输出格式

输出一个整数,表示LYA最多能参观的展览数量。

样例输入

3 1
1 2
2 3
1 1

样例输出

3

样例输入

5 2
1 1
2 2
1 2
2 2
1 1

样例输出

4

数据范围

  • 1 ≤ n ≤ 1 0 4 1 \leq n \leq 10^4 1n104
  • 1 ≤ k ≤ 10 1 \leq k \leq 10 1k10
  • 1 ≤ s t a r t i ≤ e n d i ≤ 1 0 9 1 \leq start_i \leq end_i \leq 10^9 1startiendi109

题解

贪心

优先安排结束时间早的展览,并尽可能将展览安排在其结束的那一天。

  1. 将所有展览按照结束时间从早到晚排序。这样可以确保我们优先考虑那些即将结束的展览。

  2. 使用一个优先队列(小根堆)来维护每天可以参观的展览数量。

  3. 遍历排序后的展览列表,对于每个展览:

    • 检查从开始日期到结束日期的每一天。
    • 如果某一天的参观数量还未达到上限 k k k,就在这一天参观该展览。
    • 如果所有天数的参观数量都已达到上限,就无法参观这个展览。
  4. 统计能够参观的展览总数。

参考代码

🔒订阅专栏解锁参考代码以及评测功能 → \to 🧷华为春秋招笔试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春秋招笔试突围

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值