当前位置: 首页 > news >正文

【华为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); // 输出结果}
})();

注意:

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

相关文章:

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

【华为OD-E卷 - 热点网站统计 100分&#xff08;python、java、c、js、c&#xff09;】 题目 企业路由器的统计页面&#xff0c;有一个功能需要动态统计公司访问最多的网页URL top N。请设计一个算法&#xff0c;可以高效动态统计Top N的页面 输入描述 每一行都是一个URL或…...

Ubuntu下安装Android Sdk

下载android sdk命令行工具 https://developer.android.com/studio?hlzh-cn#command-tools mkdir android-sdk cd android-sdk unzip commandlinetools-linux-11076708_latest.zip 添加环境变量到~/.bashrc export ANDROID_HOME$HOME/android-sdk export PATH$PATH:$ANDRO…...

【JVM】总结篇-类的加载篇之 类的加载器 和ClassLoader分析

文章目录 类的加载器ClassLoader自定义类加载器双亲委派机制概念源码分析优势劣势如何打破Tomcat 沙箱安全机制JDK9 双亲委派机制变化 类的加载器 获得当前类的ClassLoader clazz.getClassLoader() 获得当前线程上下文的ClassLoader Thread.currentThread().getContextClassLoa…...

怎样修改el-table主题样式

起因&#xff1a;el-table有主题样式&#xff0c;部分需要单独设置 环境&#xff1a;ideanodejs插件谷歌浏览器 第一步&#xff1a;找到scss文件&#xff1a; 谷歌浏览器打开表格页面&#xff0c;ctrlshifti打开开发者工具&#xff0c;点击后鼠标移动到表格单元格上单击一下…...

MySQL(二)MySQL DDL数据库定义语言

1. MySQL DDL数据库定义语言 1.1. MySQL定义语言 进入MySQL mysql -u root -p(回车后输入密码&#xff0c;即可进入mysq1)1.1.1. 数据库操作 &#xff08;1&#xff09;查看数据库 mysql>show databases;注:MySQL语句分隔符为“&#xff1b;”   mysql库很重要它里面有…...

Spring Boot 项目启动报 NoClassDefFoundError 异常的原因分析与解决方案 - jackson 版本不一致

目录 报错: 问题分析&#xff1a; 解决方案&#xff1a; 方案 1&#xff1a;对 Jackson 版本进行统一 方案 2&#xff1a;升级 Springfox 版本 方案 3&#xff1a;替换 Springfox 为 springdoc-openapi&#xff08;推荐&#xff09; 方案 4&#xff1a;排除冲突的 Jack…...

原型与原型链

什么是原型&#xff08;对象&#xff09; 在JavaScript中&#xff0c;每个对象都具有一个原型对象prototype&#xff0c;目的是&#xff1a;利用原型对象实现在同一原型链中的原型方法共享 在理解原型对象前&#xff0c;需要先了解什么是构造函数 构造函数 用来初始化对象的…...

【Linux】信号处理

一、Linux系统信号 1、常见的系统信号 常见的Linux系统信号 信号值描述1SIGHUP挂起&#xff08;hang up&#xff09;进程2SIGINT中断进&#xff08;interrupt&#xff09;程3SIGQUIT停止&#xff08;stop&#xff09;进程9SIGKILL无条件终止&#xff08;terminate&#xff09;…...

5个不同类型的mysql数据库安装

各种社区版本下载官方地址&#xff1a;MySQL :: MySQL Community Downloads 一、在线YUM仓库&#xff08;Linux&#xff09; 选择 MySQL Yum Repository 选择对应版本下载仓库安装包&#xff08;No thanks, just start my download.&#xff09; 下载方法1&#xff1a;下载到本…...

python学习笔记—12—布尔类型、if语句

1. 布尔类型 (1) 定义 (2) 比较运算符 (3) 代码演示 1. 手动定义 bool_1 True bool_2 False print(f"bool_1的内容是&#xff1a;{bool_1}, 类型是&#xff1a;{type(bool_1)}") print(f"bool_2的内容是&#xff1a;{bool_2}, 类型是&#xff1a;{type(bool…...

分数阶傅里叶变换代码 MATLAB实现

function Faf myfrft(f, a) %分数阶傅里叶变换函数 %输入参数&#xff1a; %f&#xff1a;原始信号 %a&#xff1a;阶数 %输出结果&#xff1a; %原始信号的a阶傅里叶变换N length(f);%总采样点数 shft rem((0:N-1)fix(N/2),N)1;%此项等同于fftshift(1:N)&#xff0c;起到翻…...

《数据结构》期末考试测试题【中】

《数据结构》期末考试测试题【中】 21.循环队列队空的判断条件为&#xff1f;22. 单链表的存储密度比1&#xff1f;23.单链表的那些操作的效率受链表长度的影响&#xff1f;24.顺序表中某元素的地址为&#xff1f;25.m叉树第K层的结点数为&#xff1f;26. 在双向循环链表某节点…...

openwrt 清缓存命令行

一、查看缓存 &#xff1a; free -m 二、清缓存&#xff1a;echo 3 > /proc/sys/vm/drop_caches  三、详解。 释放物理页缓存 echo 1 > /proc/sys/vm/drop_caches 释放可回收的slab对象&#xff0c;包含inode and dentry echo 2 > /proc/sys/vm/drop_caches 同时…...

RP2K:一个面向细粒度图像的大规模零售商品数据集

这是一种用于细粒度图像分类的新的大规模零售产品数据集。与以往专注于相对较少产品的数据集不同&#xff0c;我们收集了2000多种不同零售产品的35万张图像&#xff0c;这些图像直接在真实的零售商店的货架上拍摄。我们的数据集旨在推进零售对象识别的研究&#xff0c;该研究具…...

.NET Core FluentAPI

目录 约定配置 主要规则 两种配置方式 Data Annotation Fluent API Fluent API配置 Fluent API众多方法 选择 约定配置 主要规则 表名采用DbContext中的对应的DbSet的属性名。数据表列的名字采用实体类属性的名字&#xff0c;列的数据类型采用和实体类属性类型最兼容…...

【C++数据结构——查找】顺序查找(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 一、根据输入数据建立顺序表 二、顺序表的输出 三、顺序查找算法 测试说明 通关代码 测试结果 任务描述 本关任务&#xff1a;实现顺序查找的算法 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 根据输入数据建立…...

HTTP Scheme 通常指的是在 URL 中用于指定使用 HTTP 协议的方案(scheme)

HTTP Scheme 通常指的是在 URL 中用于指定使用 HTTP 协议的方案&#xff08;scheme&#xff09;。URL&#xff08;统一资源定位符&#xff09;中的 scheme 部分指明了访问资源所使用的协议。对于 HTTP&#xff0c;有两个主要的 scheme&#xff1a; - **http**&#xff1a;表示…...

基于Matlab的变压器仿真模型建模方法(13):单相升压自耦变压器的等效电路和仿真模型

1.单相升压自耦变压器的基本方程和等效电路 单相升压自耦变压器的接线原理图如图1所示。在建立自耦变压器的基本方程时,仍然把它看成是从双绕组变压器演变而来。在图1中,设节点a到节点b部分的绕组的匝数为,对应于双绕组变压器的原边绕组;节点c到节点a部分的绕组的绕组匝数为…...

【Vue.js】监听器功能(EventListener)的实际应用【合集】

目录 &#x1f914;在实际开发过程中&#xff0c;我遇到了一个颇为棘手的小问题 &#x1f60b;解决这个小问题 问题出现的原因剖析 解决方法阐述 问题成功解决&#xff01;​ &#x1f4d6;相关知识总结 基本概念 使用方法 实际应用场景 &#x1f914;在实际开发过程中…...

【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本

本文简述 经常使用docker部署SpringBoot 项目&#xff0c;因为自己的服务器小且项目简单&#xff0c;因此没有使用自动化部署。每次将jar包传到服务器后&#xff0c;需要手动构建&#xff0c;然后停止原有容器&#xff0c;并使用新的镜像启动&#xff0c;介于AI时代越来越懒的…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...