zoukankan      html  css  js  c++  java
  • 关于求出两个整形数组不同元素,要求效率最高

    由于两个数组,一比较就会出现两次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 }

     运行结果:

  • 相关阅读:
    wikiquote
    zz 勵志貼,成功是努力加对的方向
    # 电纸书
    # 崔寶秋
    好的程序員
    深度学习引擎
    再见乱码:5分钟读懂MySQL字符集设置
    Linux基础:用tcpdump抓包
    Linux基础:文件查找find
    Linux基础:xargs命令
  • 原文地址:https://www.cnblogs.com/leisc/p/3840441.html
Copyright © 2011-2022 走看看