两个集合求对称差集

对称差集,两个集合的并集,减去交集。

比如,集合1,2,3和集合3,3,4,5的对称差是集合1,2,4,5。

想到的解法,将两个排序,两个集合分别用两个工作指针i,j。比较两个指针指向的元素,相同就都后移,不相同,更小的指针后移。

以下代码,给出了求对称差集数量的代码。

public static int distinctElementCount(int arr1[], int arr2[])
    {
        if (arr1.length == 0) {
            return arr2.length;
        }
        if (arr2.length == 0) {
            return arr1.length;
        }
        int count = 0;
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        int i=0,j=0, same = -1;
        while (i< arr1.length && j<arr2.length) {
            if (arr1[i] == arr2[j]) {
                same = arr1[i];
                i++;j++;
            } else if (arr1[i] == same) {
                i++;
            } else if (arr2[j] == same) {
                j++;
            } else if (arr1[i] < arr2[j]) {
                i++;
                count++;
            } else {
                j++;
                count++;
            }
        }
        count += arr1.length + arr2.length - i - j;

        return count;
    }

    @Test
    public void testDistinct() {
        Assert.assertEquals(6, distinctElementCount(new int[]{1,2,3,4}, new int[]{4,5,6,7}));
        Assert.assertEquals(7, distinctElementCount(new int[]{4,3,5,6}, new int[]{3,2,1,6,3,9,8,13}));
        Assert.assertEquals(12, distinctElementCount(new int[]{1,2,3,4,5,6,7,8,9,10}, new int[]{11,12,13,4,5,6,7,18,19,20}));
    }
时间: 2024-10-22 09:38:27

两个集合求对称差集的相关文章

两个集合求差

需求:从两个不同历史版本的数据库提取出相同的表数据(多个表)进行差异对比. 实施:使用集合的Except扩展方法 过程:开始想的是写代码循环比较差异,但是代码写起来比较繁琐,后来发现集合有一个Except扩展方法正是用来实现求差集的. 部分代码如下 EnumerableRowCollection<HtRefInfo> hta; EnumerableRowCollection<HtRefInfo> htb; hta = DalA.LoadHt(ids); htb = DalB.Loa

AutoCAD.Net/C#.Net QQ群:193522571 LinQ 两个集合求交集、并集

//取得交集 Pn = PnFace.Intersect(PnType).ToList(); //取得并集 Pn = PnFace.Concat(PnType).ToList();

python里面集合的集合的交、并、差和对称差集的求法。

集合里面交.并.差.对称差集其实也是集合的专用操作. a&b :交集 表两个集合的共同元素,等价于a.intersection(b) a|b:并集  表两个集合的所有元素,等价于a.union(b) a-b:差集  表只属于a,但不属于b的元素,等价于a.difference(b) a^b:对称差分集  表两个集合的非共同元素,等价于a.symmetric_difference(b) 代码如下: 求集合的交集: 1 # 定义两个集合 2 x = set("abc") 3 y =

java求两个集合的差集

public static void main(String[] args) {Set set = new HashSet();Set set1 = new HashSet();set.add("sanny");set.add("mary");set.add("bill");set.add("tom");set.add("tony");set.add("mark");set.add(&q

计算两个集合的差集——第六期 Power8 算法挑战赛

第六期Power8大赛 1.1 比赛题目 题目: 计算两个集合的差集: 详细说明: 分别有集合A和B两个大数集合,求解集合A与B的差集(A中有,但B中无的元素),并将结果保存在集合C中,要求集合C中的元素升序. 输入为两个文件,分别为A.txt,B.txt,一行一个值,并且是无序的.结果输出到C.txt,即输入文件的差集,一行一个值,并且要求结果升序排列. 考量点: (1) 大数集合求差集: (2) 大数据集合排序: 题目实例: 例如,若集合A={5,20,10,15,25,30},集合B={1

集合set的差集----求缺考的考生

package cn.cqu.huang; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class SetDemo { public static void main(String[] args) { String[] a = {"ZhangSan","LiSi","WangWu","ZhaoLiu",&qu

求两个集合的交集和并集C#

我是用hashset<T>来实现的 具体如代码所示 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JiaoJi { class Program { static void Main(string[] args) { int [] arrA=new int[8]{1,2,3,4,5,6,7,8}; int [] arrB=new int[5]{4,5,

mysql获取两个集合的交集和差集

mysql中获取两个集合的交集,我的方法如下: 1.两个集合的结构要一致,对应的字段数,字段类型 2.将两个集合用 UNION ALL 关键字合并,这里的结果是有重复的所有集 3.将上面的所有集 GROUP BY id 4.最后 HAVING COUNT(id)=1,等于1的意思是只出现了一次,所以这个是差集,如果等于2,那么就是交集 这是实现的基本原理,具体如下: 1 -- 下面的sql有明显的问题,不过这个只是一个示意,从一个表中查询不需要用到交集和差集,条件可以合并在一起直接查询出来的.能

用顺序表实现求两个集合的并集

#include<iostream.h> #include<malloc.h> #include<limits.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<stdlib.h> #include<process.h> #define OK 1 #define INIT_LiST_SIZE 100//顺序表的初始长度 #de