通过率 71% · 提交 414 · 通过 295
企业路由器的统计页面,有一个功能需要动态统计公司访问最多的网页 URL Top N。 请设计一个算法,可以高效动态统计 Top N 的页面。
这类题属于华为 OD 机考真题方向中「100分 / 排序」方向的高频题型,通常考察对「100分 / 排序」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
每一行都是一个URL或一个数字 如果是 URL,代表一段时间内的网页访问 如果是一个数字 N,代表本次需要输出的 Top N 个 URL
输入约束: 1.总访问网页数量小于 5000 个,单网页访问次数小于 65535 次 2.网页 URL 仅由字母,数字和点分隔符组成,且长度小于等于 127 字节 3.数字是正整数,小于等于 10 且小于当前总访问网页数
每行输入要对应一行输出,输出按访问次数排序的前 N 个 URL,用逗号分隔。
输出要求: 1.每次输出要统计之前所有输入,不仅是本次输入 2.如果有访问次数相等的 URL,按 URL 的字符串字典序升序排列,输出排序靠前的 URL
示例 1
输入示例
news.qq.com news.sina.com.cn news.qq.com news.qq.com game.163.com game.163.com www.huawei.com www.cctv.com 3 www.huawei.com www.cctv.com www.huawei.com www.cctv.com www.huawei.com www.cctv.com www.huawei.com www.cctv.com www.huawei.com 3
输出示例
news.qq.com,game.163.com,news.sina.com.cn www.huawei.com,www.cctv.com,news.qq.com
示例 2
输入示例
news.qq.com www.cctv.com 1 www.huawei.com www.huawei.com 2 3
输出示例
news.qq.com www.huawei.com,news.qq.com www.huawei.com,news.qq.com,www.cctv.com
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
显然是考察排序的一道题目。
每一行的输入只会是两种情况:
注意到每次输入 URL 的时候,都需要重新更新它的访问次数,这很明显可以使用哈希表来完成关于访问次数的统计。此外,由于输入的长度不定,因此需要使用 try-except 异常处理语句来进行编写输入。
因此整体的代码框架如下:
剩下的内容就是要处理代码中,关于输入之后的排序部分。
注意到我们首先要按照出现频次降序排列,相同频次的再按照字典序升序排列。排序的对象为 cnt 中的这些 key(若干的 URL)组成的列表,故对应的 lambda 函数为:
如果再加上取前 N 个的切片操作,以及用 "," 进行合并为字符串,再将字符串存入 ans 中,则代码为:
把上述代码放入上述代码框架中的 pass 部分,就基本完成了本题。
本题涉及到的动态排序过程,最优的解法实际上是使用堆/优先队列来解决。感兴趣的同学可以自己去尝试一下。
复杂度分析 设输入总行数为 L,其中查询(数字行)共 q 次,处理到某次查询时哈希表里的不同 URL 数为 k(k 不超过此前 URL 行的总数)。
因此总时间复杂度为 O(L + q·k log k),瓶颈在每次查询都对全量 URL 重新排序;思路末尾提到的堆/优先队列正是针对这一点的优化方向。空间上哈希表保存 k 个 URL 及其计数,按 URL 总字符数计为 O(k)。
边界与注意事项
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有