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

GESP2026年3月认证C++五级( 第三部分编程题(2)找数)


🌟 题目:找数(两个数组交集)


🧠 一、故事:两支探险队 🧭

有两支探险队:

  • 🟦 A队:有 n 个宝藏

  • 🟥 B队:有 m 个宝藏

👉 每个宝藏都有一个编号(整数)


👑 国王说:

“统计一下,有多少宝藏同时出现在 A队 和 B队!”


🌟 二、问题本质(非常重要!)

👉 就是:

求两个数组的“交集个数”

🌟 三、最简单理解(暴力方法)


❌方法1:双重循环

for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(a[i] == b[j]) ans++;

❗问题:

👉 时间复杂度:

O(n × m)

👉 太慢!(考试会超时)


🌟 四、聪明方法(二分查找🔥)


🧠故事:图书馆找书 📚

A队的书已经整理好了(排序)

👉 想找一本书:

👉 用“二分查找”!


🌟 五、核心思路(必须掌握!)


🎯步骤:

1️⃣ 先排序 A

sort(a.begin(), a.end());

2️⃣ 遍历 B

对每个 b:

👉 去 A 里面找!


3️⃣ 用二分查找


🌟 六、二分查找详解(重点🔥)


1、🧠故事:猜数字游戏 🎯

你要找一个数:

l = 0, r = n-1

2✨每次:

mid = (l + r) / 2

3、判断:

if(a[mid] > b) r = mid - 1; else if(a[mid] < b) l = mid + 1; else 找到了!

🌟 七、完整代码

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, m; cin >> n >> m; vector<int> a(n); // 输入 A for(int i = 0; i < n; i++) cin >> a[i]; // 排序 A(非常关键!) sort(a.begin(), a.end()); int ans = 0; // 遍历 B for(int i = 0, b; i < m; i++) { cin >> b; int l = 0, r = n - 1; bool ok = false; // 二分查找 while(l <= r) { int mid = (l + r) / 2; if(a[mid] > b) r = mid - 1; else if(a[mid] < b) l = mid + 1; else { ok = true; break; } } if(ok) ans++; } cout << ans << endl; return 0; }

🌟 八、举个例子


1、🌰输入:

A = [4, 2, 3] B = [3, 1, 5, 4, 6]

2、✨步骤:

排序 A:

A = [2, 3, 4]

3、遍历 B:

  • 找 3 ✔️

  • 找 1 ❌

  • 找 5 ❌

  • 找 4 ✔️

  • 找 6 ❌


4、👉 总共:

2 个

🌟 九、复杂度分析


⏱ 时间复杂度:

  • 排序:O(n log n)

  • 查找:m × O(log n)


👉 总:

O(n log n + m log n)

🌟 十、进阶技巧(高手必备🔥)


🎯方法2:双指针(更快)

1、👉 如果两个数组都排序:

i 指向 A j 指向 B

2、同时移动:

A[i] == B[j] → ans++ A[i] < B[j] → i++ A[i] > B[j] → j++

3、👉 时间复杂度:

O(n + m)

🌟 十一、总结


🎯这类题本质:

👉查找 + 优化


🎯多种解法比较:

方法复杂度推荐
暴力O(nm)
二分O(m log n)✔️
双指针O(n+m)⭐⭐⭐

🌟 十二、考点回顾:

我们必须掌握:


1️⃣ 二分查找模板(超级重点🔥)

while(l <= r){ mid = (l + r)/2; if(a[mid] > x) r = mid - 1; else if(a[mid] < x) l = mid + 1; else return true; }

2️⃣ 排序 + 查找组合思维

👉 GESP五级考试很多题都是:

排序 + 二分

http://www.jsqmd.com/news/528245/

相关文章:

  • 2026年济南寄宿初中学校推荐:济南世纪英华实验学校,私立初中/民办初中/私立小学/民办高中学校精选 - 品牌推荐官
  • 深度解密NDS游戏文件:专业逆向工程工具实战指南
  • JavaWeb ——HttpServletResponse 响应对象全解析(附代码)
  • 全场景显存检测:从个人电脑到数据中心的稳定性保障方案
  • 使用支付宝立减金前必读:掌握这些技巧,快速上手! - 团团收购物卡回收
  • 【Matlab】MATLAB教程:可变输入参数varargin(案例:func(varargin),应用:不定参数函数)
  • iOS证书(.p12)和描述文件保姆级生成指南:从App ID创建到真机测试全流程
  • 2026年3月宠物就医指南:探秘3公里内优质宠物医院 - 品牌推荐师
  • 从MySQL切到PostgreSQL?一个Dialect配置引发的“血案”与避坑指南
  • Qwen2.5-7B-Instruct保姆级入门:从零到一搭建智能对话应用
  • Ardupilot源码框架解析:从零开始搭建你的无人机飞控系统(基于Pixhawk平台)
  • Python 调试神器:pdb 调试器零基础入门,告别 print 调试
  • 2026年家用排插什么品牌的好?安全实用之选推荐 - 品牌排行榜
  • 生物信息学实操:用psmc_plot.pl绘制专业级PSMC结果图的5个关键技巧
  • LVGL嵌入式UI开发:手把手教你理解其内部链表lv_ll的设计与内存布局
  • Matlab/Simulink 10KV电压等级SVG仿真模型 含相内均压控,电压外环电流内环...
  • cppQueue:嵌入式轻量级跨平台队列库深度解析
  • 用Simulink和PID控制,手把手教你搭建一个简易的汽车定速巡航仿真模型(MATLAB 2023b)
  • 新手必看:服务器线路选择指南(单线、双线、三线、BGP全解析)
  • DEAP进化算法框架:从理论探索到工业级实践
  • 避坑指南:Ollama在Linux系统部署时常见的5个权限问题(附deepseek模型解决方案)
  • Win11共享打印机0x00000709终极排障:从凭证到注册表的实战指南
  • 告别部署难题!Qwen3-14B Docker镜像一键启动,5分钟搭建企业AI助手
  • YOLO12大模型在GPU平台上的高效推理技巧
  • QT6 vs QT5安装对比:如何根据项目需求选择合适的版本(含性能差异分析)
  • LoFTR实战:如何用Transformer实现无检测器特征匹配(附室内外模型效果对比)
  • 别再手动输号码了!用uni-app的makePhoneCall API,5分钟搞定微信小程序一键拨号功能
  • 对比评测:nlp_structbert_sentence-similarity_chinese-large在不同行业文本上的表现
  • 深入解析giflib:从基础编解码到Qt集成实战
  • 基于springboot啦啦鑫宠物管理系统设计与开发(源码+精品论文+答辩PPT等资料)