通过从每个集合中选取一个值来计算一对集合

时间:2018-10-20 21:02:58

标签: java algorithm set

我正在尝试计算可能的对数,这可以通过从两个集合中取值来得出。没有人集合。我还尝试使用 Java Set来实现它。但是我一直坚持逻辑,如何计算这种可能的组合。

问题示例:

Input:
Set 1: [0, 1, 4]
Set 2: [2, 3]
Set None: []

在这里,可能的对组合为[0,2],[0,3],[1,2],[1,3],[4,2],[4,3]

Output:
6 combination to choose pair by taking one value from each set
  

这里是代码:

static Set<Integer> countryOne = new HashSet();
static Set<Integer> countryTwo = new HashSet();
static Set<Integer> countryNone = new HashSet();

static int journeyToMoon(int n, int[][] astronaut) {
    ///Separating diffrent country from input
    countryOne.add(astronaut[0][0]); countryOne.add(astronaut[0][1]);
    for(int i=1; i<astronaut.length; i++){
        boolean countryCheckFlag = false;
        for(int j=0; j<astronaut[i].length; j++){
            if(countryOne.contains(astronaut[i][j])){
                countryCheckFlag = true;
            }
        }
        if(countryCheckFlag){countryOne.add(astronaut[i][0]); countryOne.add(astronaut[i][1]);}
        else {countryTwo.add(astronaut[i][0]); countryTwo.add(astronaut[i][1]);}
    }

    ///Separating country which not present in input
    for(int i=0; i<n; i++){
        if(!countryOne.contains(i) && !countryTwo.contains(i))
            countryNone.add(i);
    }

    //Now i have two diffrent set

    return 0;
}

输入在一定程度上可能会有所不同,例如这样

Input:
Set 1: [0, 2]
Set 2: []
Set None: [1, 3]

在这里,可能的像对组合是[0,1],[0,3],[2,1],[2,3]像以前一样,但是因为它是Set None,所以它将在将None设置为多余,例如[1,3]

Output:
5 combination to choose pair by taking one value from each set

这里可能是答案,例如,总组合=(第一组和第二组可能的乘积与乘积)+(第一组和第二组的可能组合各不带任何设定)+(所有无差异的集合无可能的组合) )

如果是,如何进行计算。输入范围在1到10 ^ 5之间。谢谢。

1 个答案:

答案 0 :(得分:1)

要计算组合总数,您只需使用

int a = set1.size() * set2.size();

要计算n元素对的总数,可以使用公式(n*n - n) / 2,因此在您的示例中,可能是

int x = setNone.size();
int b = (x * x - x) / 2