zoukankan      html  css  js  c++  java
  • 删除集合中相同的元素, 求并集

    • 删除数据库中相同内容元素的方法是非常常见的问题,数据重复会占用许多不必要的空间。
    • 如集合arr1[] ={11, 22, 33, 44, 55}; arr2[] ={23, 11, 64, 55, 98};都具有相同的元素{11, 55},那么如何将arr2中的元素添加到arr1呢?
    • arr2中的第一个元素arr2[0]=23arr1中的arr[i++]所有元素进行遍历比较。如果有相同的元素就break,这样可以减少循环步骤;如果没有相同的元素,则将这个元素加到arr1中。
    • 代码如下:
    #include"stdio.h"
    //输出
    int print(int arr[], int arrayLength){
        for(int i = 0; i < arrayLength; i++){
            printf("%d ", arr[i]);
        }
        printf("
    ");
    }
    //并集
    int unions(int *p1, int *p2){
       int unions[10] = {0}, index = 5;
       for(int m=0; m<5; m++){
          *(unions+m)=*(p1+m);
       }
       int arrFlag=5;
       for(int i=0;i<5;i++){
          int flag=0;
          for(int j=0;j<10;j++){
             if(*(unions+j) != *(p2+i) && *(unions+j)!=0){
                 ++flag;
             }
          }
          if(flag==arrFlag){
             ++arrFlag;
             *(unions+index++) = *(p2+i); 
          }
       }
       printf("集合的并集是:");
       print(unions,10);
    }
    int main(){
       int arr1[] ={11, 22, 33, 44, 55}; 
       int arr2[] ={23, 11, 64, 55, 98};
       int arrayLength = sizeof(arr1)/4;
       printf("原集合:");
       print(arr1,arrayLength);
       print(arr2,arrayLength);
       unions(arr1,arr2);
    } 
    
    • 从上面论述中可以发现,数组arr2中的所有元素要和数组arr1的所有元素进行比较,这样时间复杂度为O(n*m),n为arr1元素的个数,m为arr2元素的个数。如果有100个数据,则要进行10000次比较,所以是十分浪费时间的。
    • 改进方法:将数组arr1中的所有元素进行排序,用arr2中的元素在数组arr1中的所有元素进行二分查找(时间复杂度:O(log2n)),这样可以大大减少执行步骤。时间复杂度为:O(n log n + log2n)。
    • 算法来源:高三刷计基题有大量重复的题目,如何减少重复的题目,减少不必要的时间。

    ❤️有则改之,无则加勉。如有错误、建议、疑问,评论或联系飞沙QQ:2602629646
    ❤️本文来自作者:MrFlySand,转载请注明原文链接:https://www.cnblogs.com/MrFlySand/p/14128406.html

  • 相关阅读:
    1321棋盘问题
    2488A Knight's Journey
    1947Rebuilding Roads
    2057The Lost House
    2196Specialized Four-Digit Numbers
    /etc/sysctl.conf
    运维五步走
    虚拟机无法获得使用权问题
    ST/FC/SC/LC光纤的区别及适用场合;光纤适配器PC、APC和UPC区别
    Unity3D Kinect 控制人物模型
  • 原文地址:https://www.cnblogs.com/MrFlySand/p/14128406.html
Copyright © 2011-2022 走看看