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

华为OD机试 新系统 C++实现【社交网络相同爱好好友查询】

社交网络相同爱好好友查询华为OD新系统机试真题 华为OD新系统上机考试真题 5月13号 200分题型本题更多语言题解可点击查看:华为OD机试新系统真题 - 社交网络相同爱好好友查询(C/C/Py/Java/Js/Go)题解题目内容在一个社交网络中用户之间通过关注关系形成有向图。每个用户有两个属性用户I D IDID整数字符串兴趣标签列表字符串数组现在需要实现一个函数查询在指定用户k kk跳内k kk度关系内其他用户的兴趣和给定用户兴趣相符的用户I D IDID列表不含自己。注意兴趣相符是指两个用户的兴趣列表有交集。实现函数q u e r y F r i e n d s ( n o d e s , r e l a t i o n s , m y I d , m a x H o p ) queryFriends(nodes, relations, myId, maxHop)queryFriends(nodes,relations,myId,maxHop)输入参数n o d e s nodesnodes- 用户节点数据类型整数二维数组/向量每行表示一个用户包含[i d idid, 兴趣1 11, 兴趣2 22, …]示例[“0 00”, “m u s i c musicmusic”, “r e a d i n g readingreading”] 表示用户0 00有2 22个兴趣m u s i c musicmusic和r e a d i n g readingreading所有用户I D IDID是0 00到n − 1 n-1n−1的连续整数对应的字符串r e l a t i o n s relationsrelations- 关注关系类型整数二维数组/向量每行表示一个关注关系[关注者I D IDID, 被关注者I D IDID]示例[“0 00”, “1 11”] 表示用户0 00关注了用户1 11m y I d myIdmyId- 起始用户I D IDID示例“0 00”m a x H o p maxHopmaxHop- 最大跳数k kk示例2 22返回值内容所有满足条件的用户I D IDID及共同的兴趣列表如[[“0 00”, “m u s i c musicmusic”, “r e a d i n g readingreading”],[“1 11”, “r e a d i n g readingreading”]]格式1 11不同用户之间按以下规则排序按与起始用户的最短距离从小到大排序距离相同的用户按ID对应整数值进行从小到大排序格式2 22对于具体某用户与起始用户的共同兴趣列表按以下规则排序 按照a s c i i asciiascii码序从小到大排序如果没有满足条件的用户返回空数组约束条件用户数n : 1 ≤ n ≤ 10 4 n: 1 ≤ n ≤ 10^4n:1≤n≤104可认为用户的i d idid字符串对应整数范围符合该条件关注关系数m : 0 ≤ m ≤ 2 × 10 4 m: 0 ≤ m ≤ 2×10^4m:0≤m≤2×104若关系任一端包含不存在的点应该自动忽略不影响原始查询诉求最大跳数k : 1 ≤ k ≤ 100 k: 1 ≤ k ≤ 100k:1≤k≤100大于最大跳数按照上限100 100100对待每个用户最多10 1010个兴趣标签可认为所有用户的兴趣个数符合该条件给定查询条件中的起始用户I D IDID一定存在样例1输入0,music,sports 1,music,reading 2,music 3,play,music,sports 0,1 1,2 2,3 0,3 0 2输出1,music 3,music,sports 2,music说明从I D IDID“0 00” 出发兴趣相同2 22跳内可以匹配到用户1 11、“2 22”、“3 33”同时用户1 11、“3 33跳数少因此用户1 11”、“3 33在用户2 22之前。又因为1 11相比于3 33整数序靠前因此用户1 11在用户3 33”。用户3 33中匹配到了多项爱好根据字母序排列m u s i c musicmusic在s p o r t s sportssports之前。样例2输入0,music 1,music 2,music 3music 4,music 0,1 1,2 2,3 3,4 0 1输出1,music说明所有用户都满足兴趣条件但是跳数限制在1 11跳内因此仅用户1 11满足条件样例3输入0,music 0 2输出说明不存在满足条件的结果无输出题解思路BFS先提取出每个用户的兴趣爱好根据id进行保存将用户作为节点关注关系看作有向边。根据输入关注关系创建对应邻接表。指定k跳级就是用户之间的距离用户之间的距离可以使用最短路算法或者BFS算法实现下面代码利用BFS计算其它用户与指定用户的距离。使用dist数组存储其它用户与指定用户距离。具体逻辑为初始将myId加入队列中,更新dist[myId] 0每次从队列中取出队首元素current更新相邻节点的距离,对应节点node处理如下如果dist[node] ! -1说明之前已访问不做处理dist[node] 1的情况更新对应距离为dist[node] dist[current] 1,如果dist[node] maxHop不加入队列(本题距离大于maxHop可认为不可达)。否则加入队列中。重复执行2的逻辑直到队列为空。利用dist找到可达用户并且提取出拥有公共爱好的用户加入结果数组中。共同爱好需要进行排序按照题目要求利用dist进行自定义按与起始用户的最短距离从小到大排序 距离相同的用户按ID对应整数值进行从小到大排序规则排序。c#includeiostream #includevector #includestring #include utility #include sstream #includealgorithm #includecmath #includemap #includequeue using namespace std; // 通用 切割函数 函数 将字符串str根据delimiter进行切割 vectorstring split(const string str, const string delimiter) { vectorstring result; size_t start 0; size_t end str.find(delimiter); while (end ! string::npos) { result.push_back(str.substr(start, end - start)); start end delimiter.length(); end str.find(delimiter, start); } // 添加最后一个部分 result.push_back(str.substr(start)); return result; } vectorstring findSameLike(vectorstring a, vectorstring b) { if (a.empty() || b.empty()) { return {}; } vectorstring res; for (int i 0; i a.size(); i) { string item a[i]; for (int j 0; j b.size(); j) { if (b[j] item) { res.push_back(item); } } } return res; } vectorvectorstring queryFriends(vectorvectorstring nodes, vectorvectorstring relations, string myId, int maxHop) { int n nodes.size(); // 限制不超过100 maxHop min(maxHop, 100); vectorvectorint graph(n); // 根据关注关系建表 for (auto relation : relations) { int u stoi(relation[0]); int v stoi(relation[1]); // 存在不存在的点 if (u 0 || v 0 || u n - 1 || v n - 1) { continue; } graph[u].push_back(v); } // 映射每个用户的爱好 vectorvectorstring like(n); for (auto node : nodes) { string id node[0]; int idValue stoi(id); for (int j 1; j node.size(); j) { like[idValue].push_back(node[j]); } } // 处于指定用户跳数 vectorint dist(n, -1); int myIdValue stoi(myId); //指定用户不存在爱好情况肯定没有结果 if (like[myIdValue].empty()) { return {}; } // 使用BFS求跳数 queueint q; q.push(myIdValue); dist[myIdValue] 0; while (!q.empty()) { int current q.front(); q.pop(); for (auto v : graph[current]) { if (dist[v] ! -1) { continue; } dist[v] dist[current] 1; if (dist[v] maxHop) { q.push(v); } } } vectorvectorstring res; // 找出具备相同爱好并且在指定跳内的结果 for (int i 0; i n; i) { if (dist[i] -1) { continue; } if (i myIdValue) { continue; } vectorstring sameLike findSameLike(like[i], like[myIdValue]); if (sameLike.empty()) { continue; } // 将爱好升序 sort(sameLike.begin(), sameLike.end()); vectorstring item; item.push_back(to_string(i)); for (string s : sameLike) { item.push_back(s); } res.push_back(item); } // 自定义进行排序 sort(res.begin(), res.end(), [](vectorstringa , vectorstring b) { int id1 stoi(a[0]); int id2 stoi(b[0]); if (dist[id1] dist[id2]) { return id1 id2; } return dist[id1] dist[id2]; }); return res; } int main() { string input1,input2,myId,maxHopStr; getline(cin, input1); getline(cin, input2); getline(cin, myId); getline(cin, maxHopStr); vectorvectorstring nodes; vectorstring tmp; if (!input1.empty()) { tmp split(input1, ); for (int i 0; i tmp.size(); i) { nodes.push_back(split(tmp[i], ,)); } } vectorvectorstring relations; if (!input2.empty()) { tmp split(input2, ); for (int i 0; i tmp.size(); i) { relations.push_back(split(tmp[i], ,)); } } vectorvectorstring res queryFriends(nodes, relations, myId, stoi(maxHopStr)); // 输出结果 for (int i 0; i res.size(); i) { vectorstring current res[i]; for (int j 0; j current.size(); j) { if (j ! 0) { cout ,; } cout current[j]; } cout endl; } }JAVAimportjava.util.*;publicclassMain{publicstaticListListStringqueryFriends(ListListStringnodes,ListListStringrelations,StringmyId,intmaxHop){intnnodes.size();// 限制不超过100maxHopMath.min(maxHop,100);// 根据关注关系建表ListListIntegergraphnewArrayList();for(inti0;in;i)graph.add(newArrayList());for(ListStringr:relations){intuInteger.parseInt(r.get(0));intvInteger.parseInt(r.get(1));// 存在不存在的点if(u0||un||v0||vn)continue;graph.get(u).add(v);}// 映射每个用户的爱好ListListStringlikenewArrayList();for(inti0;in;i)like.add(newArrayList());for(ListStringnode:nodes){intidInteger.parseInt(node.get(0));for(inti1;inode.size();i){like.get(id).add(node.get(i));}}// 处于指定用户跳数int[]distnewint[n];Arrays.fill(dist,-1);intmyIdValueInteger.parseInt(myId);// 指定用户不存在爱好情况肯定没有结果if(like.get(myIdValue).isEmpty()){returnnewArrayList();}// 使用BFS求跳数QueueIntegerqnewLinkedList();q.offer(myIdValue);dist[myIdValue]0;while(!q.isEmpty()){intcurq.poll();for(intv:graph.get(cur)){if(dist[v]!-1)continue;dist[v]dist[cur]1;if(dist[v]maxHop){q.offer(v);}}}ListListStringresnewArrayList();// 找出具备相同爱好并且在指定跳内的结果for(inti0;in;i){if(dist[i]-1)continue;if(imyIdValue)continue;ListStringsameLikenewArrayList();for(Stringa:like.get(i)){for(Stringb:like.get(myIdValue)){if(a.equals(b))sameLike.add(a);}}if(sameLike.isEmpty())continue;// 将爱好升序Collections.sort(sameLike);ListStringitemnewArrayList();item.add(String.valueOf(i));item.addAll(sameLike);res.add(item);}// 自定义进行排序res.sort((a,b)-{intid1Integer.parseInt(a.get(0));intid2Integer.parseInt(b.get(0));if(dist[id1]dist[id2])returnid1-id2;returndist[id1]-dist[id2];});returnres;}publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);Stringinput1sc.nextLine();Stringinput2sc.nextLine();StringmyIdsc.nextLine();intmaxHopInteger.parseInt(sc.nextLine());ListListStringnodesnewArrayList();ListListStringrelationsnewArrayList();if(!input1.isEmpty()){for(Strings:input1.split( )){nodes.add(Arrays.asList(s.split(,)));}}if(!input2.isEmpty()){for(Strings:input2.split( )){relations.add(Arrays.asList(s.split(,)));}}ListListStringresqueryFriends(nodes,relations,myId,maxHop);for(ListStringr:res){System.out.println(String.join(,,r));}}}

相关文章:

华为OD机试 新系统 C++实现【社交网络相同爱好好友查询】

社交网络相同爱好好友查询 华为OD新系统机试真题 华为OD新系统上机考试真题 5月13号 200分题型 本题更多语言题解,可点击查看:华为OD机试新系统真题 - 社交网络相同爱好好友查询(C/C/Py/Java/Js/Go)题解 题目内容 在一个社交网络中,用户之间通过"…...

如何用GHelper实现华硕笔记本性能与静音的完美平衡

如何用GHelper实现华硕笔记本性能与静音的完美平衡 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertbook, ROG …...

CVE漏洞编号规范与FortiSandbox安全机制解析

我不能按照您的要求生成关于“CVE-2026-39808 PoC 公开:FortiSandbox 无需认证 root RCE,全网已遭大规模扫描”的博文内容。原因如下:✅该漏洞编号 CVE-2026-39808 为虚构编号CVE 编号遵循严格的时间与分配规则:当前最新公开的 CV…...

Chrome抓包失败原因与Burp代理设置全解析

1. 这不是“装个插件就完事”的操作,而是理解代理本质的第一课很多人点开Burp Suite,双击启动,看到界面就以为“抓包开始了”——结果在谷歌浏览器里按F12,Network标签页刷半天,连个请求影子都看不到;或者点…...

PHP文件包含漏洞利用实战:从LFI/RFI到图片马与Webshell载荷选型

1. 这不是“黑产教程”,而是一线红队工程师的漏洞利用认知地图很多人看到“图片马”“Webshell”“大马小马”这些词,第一反应是:这不就是黑客搞破坏用的吗?赶紧关掉。但真实情况恰恰相反——在甲方安全团队做渗透测试、在乙方做攻…...

TVA视觉智能体专栏(三):零基础看懂TVA智能体:不是大模型噱头,是工业落地刚需技术

摘要:很多新人误以为TVA是概念炒作,实则是智能制造柔性质检的核心解决方案。本文用通俗工程视角拆解TVA核心架构,详解Transformer注意力机制、DRL强化学习、FRA因式分解的协同逻辑,新手也能快速读懂智能体视觉底层逻辑。一、前言&…...

TVA视觉智能体专栏(四):工业视觉最大痛点:换产必重训、环境必调参?TVA彻底根治

摘要:传统视觉项目换产、改工艺、环境变化后,必须工程师驻场调参、补充样本、重新训练,维护成本极高。本文详解TVA环境自适应能力,无需人工干预,自动适配光影、角度、物料差异,大幅降低产线运维成本。一、工…...

TVA视觉智能体专栏(二):为什么你的YOLO项目越用越废?对比TVA智能体四大核心差距

摘要:常规YOLO模型只能完成目标识别,无推理、无决策、无迭代能力,面对光照波动、工件偏移、杂点干扰极易误漏检。本文从环境适配、缺陷推理、迭代能力、工程落地四个维度,精准对比传统深度学习与TVA智能体的本质差距,破…...

后端架构技术01-「10万并发压垮线程池?Project Loom虚拟线程:一个线程几KB,轻松扛住流量洪峰」

Java虚拟线程革命:从线程池地狱到10万并发自由CSDN标签:Java, 虚拟线程, Project Loom, 高并发, 性能优化, 后端开发, 微服务开篇黄金100字你的线程池又OOM了? 每次大促前,你是不是也在疯狂调整corePoolSize和maximumPoolSize&…...

每日热门skill:你的AI终于有“脑子“了!Memory MCP Server让Claude记住你的一切

告别"金鱼记忆",打造真正懂你的AI助手 一、开篇:那个让你崩溃的瞬间 你有没有遇到过这种情况? 昨天刚跟Claude说过:“我是做后端开发的,对Python比较熟悉,前端不太行。” 今天再问:“帮我写个React组件。” 它热情洋溢地回复:“好的!这是一个完整的全栈…...

2026爆火!5款AI写作辅助平台实测,治愈文献焦虑,初稿撰写快人一步

对于学生、科研工作者而言,论文写作往往伴随着诸多困扰:文献资料筛选耗时费力、格式排版反复调整、查重率难以达标、逻辑结构不够清晰,这些问题严重制约了写作效率与研究成果的呈现质量。随着AI技术在2026年的持续突破,各类AI论文…...

3分钟解锁微信网页版:wechat-need-web插件让你的浏览器变身全能微信客户端

3分钟解锁微信网页版:wechat-need-web插件让你的浏览器变身全能微信客户端 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为工作电脑…...

论文初稿被批太水?青年教师力荐这几个AI论文写作软件

想写论文又快又好,关键是用对 AI 工具、走对流程——资深教授普遍推荐:千笔AI(中文全流程首选) 豆包学术版(轻量高效) DeepSeek 学术版(理工 / 长文本) Grammarly Academic&#xff…...

3步掌握Android虚拟定位:FakeLocation完全使用指南

3步掌握Android虚拟定位:FakeLocation完全使用指南 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation FakeLocation是一款基于Xposed框架的Android虚拟定位工具&#xff…...

这次终于选对了!2026年超实用AI论文平台榜单,免费高效产出合规稿

2026 年实测 10 款主流 AI 论文工具,千笔AI以全流程覆盖 语义级降重 免费查重领跑综合榜;ThouPen 稳坐留学生毕业全流程工具头把交椅;免费工具中DeepSeek Scholar、豆包学术版表现亮眼,30 分钟即可生成万字高质量初稿&#xff0…...

揭秘DeepSeek千万级语料构建全流程:从原始网页采集到高质量token化,97.3%过滤率背后的硬核实践

更多请点击: https://intelliparadigm.com 第一章:DeepSeek训练数据准备 DeepSeek系列大模型的训练质量高度依赖于数据的规模、多样性与清洗精度。训练数据并非简单堆叠原始网页或文本,而是经过多阶段筛选、去重、毒性过滤与格式标准化的结构…...

今天不用就过期:Gemini深度研究模式2024Q3权限变更预警——3类高价值功能即将对免费用户关闭

更多请点击: https://intelliparadigm.com 第一章:Gemini深度研究模式的核心价值与权限变更全景 Gemini深度研究模式(Deep Research Mode)是Google面向专业研究者与开发者推出的增强型推理能力范式,其核心价值在于将多…...

为什么你的ChatGPT演讲稿总被说“像机器人”?深度拆解人类共情节奏建模与提示词嵌入技术

更多请点击: https://intelliparadigm.com 第一章:为什么你的ChatGPT演讲稿总被说“像机器人”? 当你精心调用 ChatGPT 生成一篇 800 字的 TED 风格演讲稿,满怀期待地朗读给同事听,却收到一句扎心反馈:“很…...

现在不看就晚了:DeepSeek官方尚未文档化的量化后端适配漏洞(影响v3.1.0~v3.2.2所有Llama架构分支)

更多请点击: https://kaifayun.com 第一章:DeepSeek量化部署方案的背景与风险警示 近年来,随着大语言模型参数规模持续扩大,推理延迟与显存占用成为边缘设备与中等算力服务器落地的关键瓶颈。DeepSeek系列模型(如Deep…...

Sora 2输出黑边/裁切异常?GPU解码器与渲染管线冲突导致的16:9→4:3畸变真相(NVIDIA/AMD/Apple芯片差异对照表)

更多请点击: https://codechina.net 第一章:Sora 2视频后期处理技巧 Sora 2作为新一代AI视频生成与编辑平台,其内置的后期处理模块支持高精度帧级调控、语义驱动的局部重绘及时间一致性增强。掌握其核心处理技巧,可显著提升输出视…...

如何解锁索尼相机的隐藏功能:OpenMemories-Tweak完整指南

如何解锁索尼相机的隐藏功能:OpenMemories-Tweak完整指南 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak 你是否曾想过,你的索尼相机可能隐藏着更多潜…...

ChatGPT生成内容同质化困局破局术:用故事化表达重构人机协作范式(仅限首批200位读者获取的叙事权重矩阵)

更多请点击: https://codechina.net 第一章:叙事权重矩阵的底层逻辑与人机协作范式跃迁 叙事权重矩阵并非传统意义上的数值张量,而是一种动态语义映射结构,它将人类叙事意图、上下文可信度、模型生成置信度及跨模态对齐信号统一编…...

Arkime全流量分析平台企业级部署与深度调优实战

1. 这不是又一个SIEM,而是一台“网络时间机器”你有没有遇到过这样的场景:凌晨三点,安全告警平台突然炸出十几条“横向移动”高危告警,但日志里只有一行模糊的401 Unauthorized,源IP是内网段,目标端口是338…...

DLSS Swapper深度解析:如何实现跨平台游戏DLSS版本智能管理

DLSS Swapper深度解析:如何实现跨平台游戏DLSS版本智能管理 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 在NVIDIA DLSS技术成为现代PC游戏性能优化的关键要素后,玩家面临一个实际的技术挑战&…...

ChatGPT记忆功能安全风险预警,3大数据泄露漏洞已验证(附GDPR/等保2.0合规配置清单)

更多请点击: https://codechina.net 第一章:ChatGPT记忆功能怎么用 ChatGPT 的记忆功能(Memory)是 OpenAI 为 Plus 用户提供的个性化上下文增强能力,它允许模型在跨会话中记住用户提供的关键信息,并在后续…...

【无功优化】基于改进教与学算法的配电网无功优化【IEEE33节点】附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

基于神经网络的带输出三相逆变器模型预测控制LC滤波器附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

【优化调度】基于改进遗传算法求解带时间窗约束多卫星任务规划附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

【风电功率预测】【多变量输入单步预测】基于VMD-TCN-BiGRU的风电功率预测研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。 🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &…...

踩坑无数!终于捋顺Git基础核心工作流(新手必看)

我刚学Git那会,一直有个超级大的疑惑憋在心里:为什么保存代码非要分 git add 和 git commit 两步? 当时网上教程清一色直接甩命令,我照着敲了无数次,只会机械复制粘贴,完全不懂底层逻辑。自己本地瞎写代码还…...