两个数组的组合

时间:2014-09-08 17:48:36

标签: java arrays combinations

我有两个相同大小的整数数组:a和b。它们都含有n种元素。

让我们说:

a = {1, 3, 5}, b = {2, 3, 4}

有一个函数根据这两个数字输出一个整数。计算整数的算法是随机的。但该函数需要两个整数。

问题所要求的是通过组合a中的一个元素和b中的一个元素直到使用所有元素(sum)而产生的最大整数。所以我需要找到一种方法来列出a和b的组合:...(x,y)= function(x,y)

a and b = f(1,2) + f(3,3) + f(5,4)  or
          f(1,2) + f(3,4) + f(5,3)  or
          f(1,3) + f(3,2) + f(5,4)  or
          f(1,3) + f(3,4) + f(5,2)  ... and so on which produces n*(n-1) results.

我只是坚持如何将这些结合起来并找到最大的总和。我的解决方案是运行3个循环并将每个结果存储到一个数组中,并输出它们的最大值。但是,我在制作阵列时遇到了麻烦。有人可以帮帮我吗?

谢谢。

-------------- E D I T ---------------------------

我不需要找到两个元素的总和。 假设我有两个数组:

a = {1, 2, 3}, b = {5, 3, 6}

我需要在每个元素组合并在函数中处理后找到这两个数组的最大和。让我们做一个随机函数:

public static int randomFunc(int x, int y){
       return x%(y+1);
}

然后,这些是可能的输出:

randomFunc(a[0], b[0]) + randomFunc(a[1], b[1]) + randomFunc(a[2], b[2]) = 6
randomFunc(a[0], b[0]) + randomFunc(a[1], b[2]) + randomFunc(a[2], b[1]) = 6
randomFunc(a[0], b[1]) + randomFunc(a[1], b[0]) + randomFunc(a[2], b[2]) = 6
randomFunc(a[0], b[1]) + randomFunc(a[1], b[2]) + randomFunc(a[2], b[0]) = 6
randomFunc(a[0], b[2]) + randomFunc(a[1], b[0]) + randomFunc(a[2], b[1]) = 6
randomFunc(a[0], b[2]) + randomFunc(a[1], b[1]) + randomFunc(a[2], b[0]) = 6
These answers are the same but you get the point. But out of these "outputs", it should 
output the greatest one.

2 个答案:

答案 0 :(得分:0)

这是一个快速实现,我写了两个for-each循环来计算最大总和。

 public static void main(String []args){

    int greatestSum = 0;
    int[] a = {1, 3, 5};
    int[] b = {2, 3, 4};

    for(int i : a) {
        for(int j : b) {
            if ((i+j) > greatestSum)
                greatestSum = i+j;
        }
    }

    System.out.println(greatestSum);
 }

答案 1 :(得分:0)

 You can use this as a reference code. Can be tweaked a lot but you can get an idea.
    List a = new ArrayList();
    a.add(1);
    a.add(3);
    a.add(6);

    List b = new ArrayList<Integer>();
    b.add(4);
    b.add(2);
    b.add(7);


    Hashtable result = new Hashtable<String,Integer>();
    result.put("SUM",0);
    for(int i=0;i<a.size();i++) {
        for(int j=0;j<b.size();j++) {
            int sum = ((Integer) a.get(i) + (Integer)b.get(j));
        if( sum > (Integer) result.get("SUM")) {
            result.put("SUM",sum);
            result.put("PAIRA",a.get(i));
            result.put("PAIRB",b.get(j));
        }
        }
    }
    System.out.println("Max Sum ="+result.get("SUM"));
    System.out.println("PAIR = "+result.get("PAIRA") +" , "+result.get("PAIRB"));