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

  • 相关阅读:
    PAT B1045 快速排序 (25 分)
    PAT B1042 字符统计 (20 分)
    PAT B1040 有几个PAT (25 分)
    PAT B1035 插入与归并 (25 分)
    PAT B1034 有理数四则运算 (20 分)
    PAT B1033 旧键盘打字 (20 分)
    HDU 1231 最大连续子序列
    HDU 1166 敌兵布阵
    HDU 1715 大菲波数
    HDU 1016 Prime Ring Problem
  • 原文地址:https://www.cnblogs.com/MrFlySand/p/14128406.html
Copyright © 2011-2022 走看看