关于求出两个整形数组不同元素,要求效率最高

由于两个数组,一比较就会出现两次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数组全部初始化为0
63 
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         else
76         {
77             d[c[i]]++;
78         }
79     }
80 
81     cout << "
a数组和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 }

 运行结果:

原文地址:https://www.cnblogs.com/leisc/p/3840441.html