CCF-GESP计算机学会等级考试2026年3月五级C++T2 找数
P15799 [GESP202603 五级] 找数题目描述给定一个包含nnn个互不相同的正整数的数组AAA与一个包含mmm个互不相同的正整数的数组BBB请你帮忙计算有多少个数在数组AAA与数组BBB中均出现。输入格式第一行包含两个整数n,mn,mn,m。第二行包含nnn个正整数a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1,a2,⋯,an表示数组AAA。第三行包含mmm个正整数b1,b2,⋯ ,bmb_1,b_2,\cdots,b_mb1,b2,⋯,bm表示数组BBB。输出格式输出一个整数表示在数组AAA与数组BBB中均出现的数的个数。输入输出样例 #1输入 #13 5 4 2 3 3 1 5 4 6输出 #12说明/提示样例解释样例 1 中444、333在数组AAA与BBB中均出现。数据范围对于40%40\%40%的数据保证1≤n,m≤10001 \leq n,m \leq 10001≤n,m≤1000。对于100%100\%100%的数据保证1≤n,m≤1051 \leq n,m \leq 10^51≤n,m≤1051≤ai,bi≤1091 \leq a_i,b_i \leq 10^91≤ai,bi≤109。解析1.将a数组和b数组合并排序相等的数会相邻找到有多少对相邻的数相等就是答案时间复杂度ONlogN,(Nnm),详见代码#includebits/stdc.husingnamespacestd;inta[200005];intn,m;intans0;intmain(){cinnm;for(inti1;inm;i){cina[i];}sort(a1,anm1);for(inti1;inm;i){if(a[i]a[i1])ans;}coutans;return0;}2.将ab数组分别排序用双指针法求相同的数对时间复杂度O(NlogN)Nmax(n,m)详见代码#includebits/stdc.husingnamespacestd;inta[100005];intb[100005];intn,m;intans0;intmain(){cinnm;for(inti1;in;i){cina[i];}for(inti1;im;i){cinb[i];}sort(a1,an1);//分别排序sort(b1,bm1);inti1;//a数组的第一个数intj1;//b数组的第一个数while(injm){//都没完if(a[i]b[j]){//bj小换下一个j;}elseif(a[i]b[j]){//ai小换下一个i;}else{//相等多一对相等的ans;i;j;}}coutans;return0;}另一种双指针解法#includebits/stdc.husingnamespacestd;inta[100005];intb[100005];intn,m;intans0;intmain(){cinnm;for(inti1;in;i){cina[i];}for(inti1;im;i){cinb[i];}sort(a1,an1);//分别排序sort(b1,bm1);for(inti1,j1;in;i){//枚举a数组的每一个数while(b[j]a[i]jm){//bj小于ai换下一个bjj;}if(a[i]b[j])ans;//相等多一对if(jm)break;//b数组没了结束}coutans;return0;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2429535.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!