本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。
欢迎大家订阅我的专栏:算法题解:C++与Python实现!
附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总
【题目来源】
洛谷:P15799 [GESP202603 五级] 找数 - 洛谷
【题目描述】
给定一个包含n nn个互不相同的正整数的数组A AA与一个包含m mm个互不相同的正整数的数组B BB,请你帮忙计算有多少个数在数组A AA与数组B BB中均出现。
【输入】
第一行包含两个整数n , m n,mn,m。
第二行包含n nn个正整数a 1 , a 2 , ⋯ , a n a_1,a_2,\cdots,a_na1,a2,⋯,an表示数组A AA。
第三行包含m mm个正整数b 1 , b 2 , ⋯ , b m b_1,b_2,\cdots,b_mb1,b2,⋯,bm表示数组B BB。
【输出】
输出一个整数,表示在数组A AA与数组B BB中均出现的数的个数。
【输入样例】
3 5 4 2 3 3 1 5 4 6【输出样例】
2【算法标签】
#普及-# #哈希表#
【代码详解】
#include<bits/stdc++.h>usingnamespacestd;constintN=100005;intn,m;intans;// 使用 map 记录每个数字出现的次数map<int,int>mp;intmain(){cin>>n>>m;// 读入第一个集合的元素for(inti=1;i<=n;i++){intx;cin>>x;// 记录第一个集合中数字的出现次数mp[x]++;}// 读入第二个集合的元素for(inti=1;i<=m;i++){intx;cin>>x;// 记录第二个集合中数字的出现次数mp[x]++;}// 遍历 mapfor(autox:mp){// 如果某个数字出现了两次,说明在两个集合中都出现过if(x.second==2){ans++;}}// 输出交集的大小cout<<ans<<endl;return0;}【运行结果】
3 5 4 2 3 3 1 5 4 6 2