【华为OD-E卷 - 热点网站统计 100分(python、java、c++、js、c)】

【华为OD-E卷 - 热点网站统计 100分(python、java、c++、js、c)】

题目

企业路由器的统计页面,有一个功能需要动态统计公司访问最多的网页URL top N。请设计一个算法,可以高效动态统计Top N的页面

输入描述

  • 每一行都是一个URL或一个数字,如果是URL,代表一段时间内的网页访问; 如果是一个数字N,代表本次需要输出的Top N个URL。

输入约束:

1、总访问网页数量小于5000个,单网页访问次数小于65535次; 2、网页URL仅由字母,数字和点分隔符组成,且长度小于等于127字节; 3、数字是正整数,小于等于10且小于当前总访问网页数

输出描述

  • 每行输入要对应一行输出,输出按访问次数排序的前N个URL,用逗号分隔。

输出要求:

1、每次输出要统计之前所有输入,不仅是本次输入; 2、如果有访问次数相等的URL,按URL的字符串字典序升序排列,输出排序靠前的URL

用例

用例一:
输入:
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
用例二:
输入:
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

python解法

  • 解题思路:
  • 这段代码实现了一个简单的 URL 计数器,能够实时统计 URL 的访问次数,并按要求输出访问次数最多的 URL。以下是具体功能和解题思路:

URL 统计功能:使用 Python 的 collections.Counter 数据结构对输入的 URL 进行计数。Counter 是一个专门用于计数的字典,键是 URL,值是对应 URL 出现的次数。

按条件输出:

如果输入的是一个数字 n,输出访问次数最高的前 n 个 URL。
如果输入的是一个 URL,则更新该 URL 的计数。
排序逻辑:

先按访问次数从高到低排序。
如果访问次数相同,则按 URL 的字典序排列。
输入与退出:

程序通过循环接受用户的输入。
遇到 EOFError(如用户使用 Ctrl+D 或 Ctrl+Z)时,退出程序

from collections import Counter  # 导入 Counter 用于统计 URL 的出现次数# 创建一个 Counter 对象,用于统计 URL 访问次数
url_counter = Counter()# 定义一个函数,用于获取访问次数最多的前 n 个 URL
def get_top_n_urls(n):# 将 URL 按访问次数降序排序,如果次数相同按字典序升序排列sorted_urls = sorted(url_counter.items(), key=lambda x: (-x[1], x[0]))# 提取前 n 个 URL,并用逗号连接成字符串返回return ",".join(url for url, _ in sorted_urls[:n])try:# 循环不断读取用户输入while True:input_value = input().strip()  # 去掉输入的前后空格if input_value.isnumeric():  # 如果输入的是纯数字# 将输入转换为整数并获取访问次数最多的前 n 个 URLprint(get_top_n_urls(int(input_value)))else:  # 如果输入的是一个字符串(假设是 URL)# 更新该 URL 的访问次数url_counter[input_value] += 1
except EOFError:# 遇到 EOFError(如用户按 Ctrl+D 或 Ctrl+Z)时退出程序pass

java解法

  • 解题思路
  • 这段代码实现了一个实时统计 URL 访问次数的功能,同时可以根据用户输入的数量 n 输出访问次数最多的前 n 个 URL。以下是解题步骤和逻辑:

数据存储与统计:

使用 TreeMap 存储 URL 及其对应的访问次数,TreeMap 会按键的字典序自动排序,方便管理和检索。
URL 的访问次数通过 getOrDefault 方法更新。
获取访问次数最多的 URL:

使用 PriorityQueue(优先队列)对 TreeMap 的 entrySet 进行排序。
排序规则:
优先按访问次数降序排列。
如果访问次数相同,则按 URL 的字典序升序排列。
最终输出按排序规则选取的前 n 个 URL。
输入处理:

如果输入是数字,调用 getTopN 方法输出结果。
如果输入是 URL,更新 URL 访问次数。
异常处理:

在 isNumeric 方法中捕获非数字输入的异常,确保程序不会因为非法输入而崩溃

import java.util.*;public class Main {// 用 TreeMap 存储 URL 和其访问次数,按字典序自动排序static Map<String, Integer> urlCount = new TreeMap<>();// 用 PriorityQueue 实现访问次数和字典序的自定义排序static PriorityQueue<Map.Entry<String, Integer>> pq;public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 循环读取用户输入while (sc.hasNextLine()) {String input = sc.nextLine();// 如果输入是数字if (isNumeric(input)) {int n = Integer.parseInt(input); // 将输入转换为整数System.out.println(getTopN(n)); // 获取访问次数最多的 n 个 URL} else {// 如果输入是 URL,更新其访问次数urlCount.put(input, urlCount.getOrDefault(input, 0) + 1);}}}/*** 获取访问次数最多的前 n 个 URL** @param n 前 n 个 URL* @return 按要求排序的前 n 个 URL,使用逗号分隔*/private static String getTopN(int n) {// 定义优先队列,按访问次数降序排列,如果次数相同按字典序升序pq = new PriorityQueue<>((a, b) -> {if (!a.getValue().equals(b.getValue())) {return b.getValue() - a.getValue(); // 按访问次数降序} else {return a.getKey().compareTo(b.getKey()); // 按字典序升序}});// 将 TreeMap 中的所有条目加入优先队列pq.addAll(urlCount.entrySet());// 使用 StringJoiner 拼接结果StringJoiner sj = new StringJoiner(",");for (int i = 0; i < n && !pq.isEmpty(); i++) {sj.add(pq.poll().getKey()); // 取出队列中最优先的 URL}return sj.toString();}/*** 判断字符串是否为数字** @param str 输入字符串* @return 如果是数字返回 true,否则返回 false*/private static boolean isNumeric(String str) {try {Integer.parseInt(str); // 尝试将字符串转换为整数return true;} catch (NumberFormatException e) {return false; // 转换失败说明不是数字}}
}

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

更新中

JS解法

  • 解题思路

  • 这段代码用 Node.js 实现了一个实时统计 URL 访问次数的功能,可以根据用户输入的数字 n 输出访问次数最多的前 n 个 URL。以下是代码的解题思路:

数据结构选用:

使用对象 urlVisits 存储 URL 和对应的访问次数。
urlVisits 的键为 URL,值为该 URL 的访问次数。
输入处理:

如果输入是 URL,则更新 urlVisits 中对应 URL 的访问次数。
如果输入是数字,则按规则排序并输出访问次数最多的前 n 个 URL。
排序规则:

按访问次数降序排序。
如果访问次数相同,按字典序升序排序。
异步输入:

使用 Node.js 的 readline 模块实现异步输入,允许用户连续输入。
输出处理:

将排序后的前 n 个 URL 提取并用逗号拼接输出

// 使用 readline 模块处理用户输入
const readline = require("readline").createInterface({ input: process.stdin });// 创建一个异步迭代器用于读取输入
const iterator = readline[Symbol.asyncIterator]();// 定义一个异步函数来获取输入
const getInput = async () => (await iterator.next()).value;(async function () {// 用对象存储 URL 和访问次数const urlVisits = {};// 异步循环处理输入while ((input = await getInput())) {// 将输入尝试转换为数字const number = parseInt(input);if (isNaN(number)) {// 如果输入不是数字,视为 URL,更新访问次数urlVisits[input] = (urlVisits[input] ?? 0) + 1;continue;}// 如果输入是数字,按规则排序并输出前 n 个 URLconst result = Object.entries(urlVisits) // 将对象转为 [key, value] 数组.sort((first, second) => second[1] - first[1] || // 先按访问次数降序排序first[0].localeCompare(second[0]) // 再按字典序升序排序).slice(0, number) // 获取前 n 个元素.map((item) => item[0]) // 提取 URL.join(","); // 拼接成逗号分隔的字符串console.log(result); // 输出结果}
})();

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

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

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

相关文章

安装Cockpit服务,使用Web页面管理你的Linux服务器

说起管理 Linux 服务器&#xff0c;大家首先想到的使用 SecureCRT、Xshell、MobaXterm 等工具远程到服务器&#xff0c;然后使用命令行管理服务器。今天给大家介绍一个好玩的工具&#xff0c;名字叫Cockpit&#xff0c; Cockpit 是一个免费开源的基于 web 的 Linux 服务器管理…

[A-25]ARMv8/v9-GIC的系统架构(中断的硬件基础)

ver0.1 前言 我们在观看很多的影视剧过程中,尤其是军旅体裁类型的布景中,经常会看见高级干部的办公桌上都会有几部电话机。这样的电话可不能小看,重要的事情尤其是突发和紧急的情况都要通过这几部电话第一时间通知给决策者。这几部电话,必须举报几个特点:及时性好、稳定…

13-线段的转折点样式

13-线段的转折点样式_哔哩哔哩_bilibili13-线段的转折点样式是一次性学会 Canvas 动画绘图&#xff08;核心精讲50个案例&#xff09;2023最新教程的第14集视频&#xff0c;该合集共计53集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https://www.bi…

计算机网络 (28)虚拟专用网VPN

前言 虚拟专用网络&#xff08;VPN&#xff09;是一种在公共网络上建立私有网络连接的技术&#xff0c;它允许远程用户通过加密通道访问内部网络资源&#xff0c;实现远程办公和安全通信。 一、基本概念 定义&#xff1a;VPN是一种通过公共网络&#xff08;如互联网&#xff09…

基于transformer的目标检测:DETR

目录 一、背景介绍 二、DETR的工作流程 三、DETR的架构 1. 损失函数 2. 网络框架讲解及举例 一、背景介绍 在深度学习和计算机视觉领域&#xff0c;目标检测一直是一个核心问题。传统方法依赖于复杂的流程和手工设计的组件&#xff0c;如非极大值抑制&#xff08;nms&…

Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)

Vue Amazing UI 一个 Vue 3 组件库 使用 TypeScript&#xff0c;都是单文件组件 (SFC)&#xff0c;支持 tree shaking 有点意思 English | 中文 Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库&#xff0c;包含丰富的 UI 组件和常…

C语言----指针

目录 1.概念 2.格式 3.指针操作符 4.初始化 1. 将普通变量的地址赋值给指针变量 a. 将数组的首地址赋值给指针变量 b. 将指针变量里面保存的地址赋值给另一个指针变量 5.指针运算 5.1算术运算 5.2 关系运算 指针的大小 总结&#xff1a; 段错误 指针修饰 1. con…

Python应用——将Matplotlib图形嵌入Tkinter窗口

Python应用——将Matplotlib图形嵌入Tkinter窗口 目录 Python应用——将Matplotlib图形嵌入Tkinter窗口1 模块简介2 示例代码2.1 Matplotlib嵌入Tkinter2.2 Matplotlib嵌入Tkinter并显示工具栏 1 模块简介 Tkinter是Python的标准GUI&#xff08;图形用户界面&#xff09;库&…

【linux基础I/O(2)】理解文件系统|文件缓冲区|软硬链接|动静态库

目录 前言1. 理解C语言的缓冲区2. 对文件系统的初认识3. 理解软硬链接1. 软硬链接的特征2.软硬链接的作用 4. 理解动静态库5. 总结 前言 对于文件来讲,有打开的在内存中的文件,也有没有打开的在磁盘上文件,上一篇文章讲解的是前者,本篇文章将带大家了解后者! 本章重点: 本篇文…

什么是Redis的渐进式ReHash?

文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ 文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ 文章内容收录到个人网站&#xff0c;方便阅读&#xff1a;http://hardyfish.top/ Redis 的渐进式 rehash 是一…

Linux应用软件编程--网络通信(udp协议,tcp协议)

网络通信&#xff1a;不同主机&#xff0c;进程间通信&#xff0c;分为广域网和局域网 OSI 七层模型&#xff1a;是一种理论模型 应用层&#xff1a;通信传输的数据内容 http、FTP、TFTP、MQTT 表述层&#xff1a;数据加密&#xff0c;解密操作&#xff0c;压缩&#xff…

【C++】构造函数与析构函数

写在前面 构造函数与析构函数都是属于类的默认成员函数&#xff01; 默认成员函数是程序猿不显示声明定义&#xff0c;编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的&#xff0c;关于类与对象不才在前面笔记中有详细的介绍&#xff1a;点我…

【简博士统计学习方法】3. 统计学习方法的三要素

3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间&#xff08;Hypothesis Space&#xff09;&#xff1a;所有可能的条件概率分布或决策函数&#xff0c;用 F \mathcal{F} F表示。 若定义为决策函数的集合&#xff1a; F { f ∣ Y f ( X ) } \mathcal{F…

【llm/ollama/qwen】在本地部署qwen2.5-coder并在vscode中集成使用代码提示功能

说在前面 操作系统&#xff1a;windows11ollama版本&#xff1a;0.5.4vscode版本&#xff1a;1.96.2continue插件版本&#xff1a;0.8.66 ollama安装 访问官网&#xff0c;点击下载安装即可 默认装在了C盘&#xff0c;比较蛋疼&#xff1b;但是可以指定路径安装&#xff1a;Ol…

PHP零基础入门笔记

表达式&#xff1a;任何有值的东西就是表达式 php可以解析双引号&#xff0c;不可以解析单引号&#xff0c;双引号中引用变量可以输出引用变量的值&#xff0c;但是单引号不可以 1.变量和变量的销毁 unset(变量名) //销毁变量 变量是严格区分大小写的&#xff0c;在php中…

macos安装java8

下载 dmg方式安装 安装 双击pkg运行 输入java -version验证 配置环境变量 cd ~ ls -a输入 ls -a后查看是否已经存在.bash_profile文件&#xff0c;如果已经存在就不需要创建&#xff0c;如果不存在&#xff0c;继续执行下方命令创建文件 touch .bash_profile /usr/l…

自定义校验注解

已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解) 1.自定义注解,并在注解上指定校验逻辑 Constraint(validatedBy StateValidation.class) // 指定校验逻辑 package com.example.demo.validation;import jakarta.validation.Constraint; import j…

指代消解:自然语言处理中的核心任务与技术进展

目录 前言1. 指代消解的基本概念与分类1.1 回指与共指 2. 指代消解的技术方法2.1 端到端指代消解2.2 高阶推理模型2.3 基于BERT的模型 3. 事件共指消解&#xff1a;跨文档的挑战与进展3.1 联合模型3.2 语义嵌入模型&#xff08;EPASE&#xff09; 4. 应用场景与前景展望4.1 关键…

Chapter4.1 Coding an LLM architecture

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.1 Coding an LLM architecture 4 Implementing a GPT model from Scratch To Generate Text 本章节包含 编写一个类似于GPT的大型语言模型&#xff08;LLM&#xff09;&#xff0c;这个模型可以被训练来生…

nginx正向代理从安装到使用一网打尽系列(二)使用

一、背景 使用场景大总结&#xff0c;可作为参考手册用 nginx正向代理从安装到使用一网打尽系列&#xff08;一&#xff09;安装 nginx正向代理从安装到使用一网打尽系列&#xff08;二&#xff09;使用 二、使用场景 1、所有内网应用都不能直接访问外网&#xff0c;但需要…