首页 > 代码库 > 关于求出两个整形数组不同元素,要求效率最高
关于求出两个整形数组不同元素,要求效率最高
由于两个数组,一比较就会出现两次for循环,所以我能想到的就是组合求出现次数,这样子,就不会出现两次for循环,上代码,希望有看到的提出更好的方法
1 #include <iostream> 2 using namespace std; 3 4 void printarray(int *arr, int size) 5 { 6 if (arr == nullptr) 7 { 8 return; 9 }10 cout << endl;11 for (int i = 0; i < size; i++)12 {13 cout << arr[i] << " ";14 }15 cout << endl;16 }17 18 int main()19 {20 int a[] = {1, 2, 3, 4, 5};21 int b[] = {1, 4, 5, 6, 9, 8};22 int i = 0, j = 0;23 24 int counta = sizeof(a)/sizeof(int); //a数组长度25 int countb = sizeof(b) / sizeof(int); //b数组长度26 27 cout << "a数组元素:";28 printarray(a, counta);29 30 cout << "b数组元素:";31 printarray(b, countb);32 33 int *c = new int[counta + countb]; //用于存储a、b组合后的数组34 35 //将a数组存入c数组中36 for (i = 0; i < counta; i++)37 {38 c[i] = a[i];39 }40 //将b数组存入c数组中,紧接着a数组里的元素41 for (i = counta, j = 0; i < counta + countb/*j < countb*/; i++,j++)42 {43 c[i] = b[j];44 }45 46 //求出两个数组中最大的那个值47 int maxnum = c[0];48 for (i = 0; i < counta + countb; i++)49 {50 if (maxnum < c[i])51 {52 maxnum = c[i];53 }54 }55 56 //将数组里的元素值作为d数组的下标,这样,出现这个数字一次,57 // d数组相应下标的元素值就加一,最后判断d数组里面元素的值,58 // 就知道a、b数组里面每个数字出现的次数59 // 所以一定需要求出最大的哪个元素,用来确定d数组的长度60 61 int *d = new int[maxnum + 1];62 memset(d, 0, sizeof(int)*(maxnum + 1)); //将d数组全部初始化为063 64 cout << "组合后的数组是:";65 printarray(c, counta + countb);66 67 cout << "相同的数字:";68 for (i = 0, j = 0; i < counta + countb; i++)69 {70 if (d[c[i]] >= 1)//如果d[c[i]]的值大于等于1,那么说明这个下标的值在组合数组c里面已经出现过1次以上71 {72 d[c[i]]++;73 cout << c[i] <<" ";74 }75 else76 {77 d[c[i]]++;78 }79 }80 81 cout << "\na数组和b数组不相同的数字是:";82 for (i = 0; i <= maxnum; i++)83 {84 if (d[i] == 1)85 {86 cout << i << " ";87 }88 }89 cout << endl;90 91 return 0;92 }
运行结果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。