Java 寻找可能的最大金额

Java 寻找可能的最大金额,java,arrays,numbers,Java,Arrays,Numbers,我有一些工作需要处理将两个数组中的数字相加。例如,如果输入如下所示: array1 202 167 178 18 array2 467 15 98 3 程序会将它们配对在一起,在这种情况下,较大的数字会覆盖较小的数字,使它们不相关。然后它把所有的大数字相加得到一个和。我已经解决了如何找到最小的和,但最大的和似乎更难做到。正如上面的例子,结果是 467+202+167+178=1014 因为它们是四个最大的数字。(467与18配对,202/167/178与其他任何一个配对) 我想到了类似的事情

我有一些工作需要处理将两个数组中的数字相加。例如,如果输入如下所示:

array1
202 167 178 18
array2
467 15 98 3
程序会将它们配对在一起,在这种情况下,较大的数字会覆盖较小的数字,使它们不相关。然后它把所有的大数字相加得到一个和。我已经解决了如何找到最小的和,但最大的和似乎更难做到。正如上面的例子,结果是

467+202+167+178=1014
因为它们是四个最大的数字。(467与18配对,202/167/178与其他任何一个配对)
我想到了类似的事情

for(int n=numberofnumbers-1;n>n/2;n-=1)
{
     if(array1[n]>=array2[n])
     {
         anotherarray[n]=array1[n];
     }
     else
     {
         anotherarray[n]=array2[n];
     }
}
但是,它会多次使用一个数字,并且输出将不正确。我需要一些帮助,告诉我如何让它按我想要的方式工作

编辑:所需输入:

array1
202 167 178 18
array2
467 15 98 3
期望输出:

1014
我的非工作计划带来了什么:

1338
编辑2:数字从另一种方法排序

编辑3:在看了一些建议后,我提出了以下建议:

private int[] sorting(int[] dspeed,int[] pspeed)
{
int[] answer=new int[dspeed.length+pspeed.length];
int i=0, j=0, k=0;
while(i<dspeed.length&&j<pspeed.length)
    answer[k++]=dspeed[i]<pspeed[j] ? dspeed[i++] : pspeed[j++];

while(i<dspeed.length)
    answer[k++]=dspeed[i++];

while(j<pspeed.length)
    answer[k++]=pspeed[j++];

return answer;

}
然而,我会得到毫无意义的答案。 输入示例:

array1
1 2
array2
1 2
输出

0
请看以下代码:

sum_max=0;
for(int n=0; n<array1.length; n++)
{
     if(array1[n]>=array2[n])
     {
         n_max=array1[n];
     }
     else
     {
         n_max=array2[n];
     }
     sum_max += n_max;
 }
sum_max=0;
对于(int n=0;n=array2[n])
{
n_max=array1[n];
}
其他的
{
n_max=array2[n];
}
总和_max+=n _max;
}
即使我实际上没有测试它,我认为它应该做你想做的。

或者,如果您希望它稍微短一点:

sum_max=0;
for(int n=0; n<array1.length; n++)
{
     n_max = (array1[n]>=array2[n]) ? array1[n] : array2[n];
     sum_max += n_max;
}
sum_max=0;
对于(int n=0;n=array2[n])?阵列1[n]:阵列2[n];
总和_max+=n _max;
}

最简单的方法是合并两个数组,对数组进行排序,然后添加数组的最后四个元素。显然,有更好的方法可以做到这一点,但因为我坚持你能理解的最简单的方法。 像这样:

import java.util.Arrays;

class Main {
  public static void main(String[] args) {
        int[] arr1 = { 202, 167, 178, 18 };
        int[] arr2 = { 467, 15, 98, 3 };
        int[] arr3 = new int[arr1.length+arr2.length];

        for(int i=0;i<arr1.length;i++)
            arr3[i]=arr1[i];

        for(int i=0;i<arr2.length;i++)
            arr3[arr1.length+i]=arr2[i];

        Arrays.sort(arr3);

        int len = arr3.length;

        int sum = arr3[len-1]+ arr3[len-2]+ arr3[len-3]+ arr3[len-4];
        System.out.println(sum);
  }
}
导入java.util.array;
班长{
公共静态void main(字符串[]args){
int[]arr1={20216717818};
int[]arr2={467,15,98,3};
int[]arr3=新int[arr1.length+arr2.length];

对于(int i=0;i如果我理解正确,规则如下:

  • 将数组1中的数字与数组2中的数字配对
  • 数字只能配对一次
  • 从每对中选择最大的数字
  • 把这些数字加起来
  • 求和最大的对的组合
这意味着您需要使用每个数组中的最大数求和。最简单的方法是对两个数组进行排序,一个升序,一个降序。现在按索引位置配对

在Java中,对原语数组进行升序排序很容易。只需使用

没有降序排序的方法,因此您可以对数组进行升序排序和反转,但也没有相应的方法,尽管为此编写方法很容易

我们只是把数字按相反的顺序配对

private static int highestSum(int[] array1, int[] array2) {
    if (array1.length != array2.length)
        throw new IllegalArgumentException();
    Arrays.sort(array1);
    Arrays.sort(array2);
    int sum = 0;
    for (int i = 0; i < array1.length; i++) {
        int value1 = array1[i];
        int value2 = array2[array2.length - i - 1];
        int max = Math.max(value1, value2);
        sum += max;
    }
    return sum;
}
输出

1014

请使用另一种方法:对两个数组进行排序。比较两个数组中的最大数,并将其作为总和。继续执行此操作,不使用choosen元素,直到找到成对的数组为止

sum_max=0;
Arrays.sort(arr1);
Arrays.sort(arr2);
n1=array1.length-1;
n2=n1;
count=n1;

while(count>=0)
{
    if(array1[n1]>=array2[n2])
     {
         n_max=array1[n1];
         n1--;
     }
     else
     {
         n_max=array2[n2];
         n2--;
     }
     sum_max += n_max;
     count--;
}

从您的描述中,不清楚您想要完成什么。您在描述问题和描述问题的解决方案之间交替进行。通过提供示例输入和该输入的示例所需输出,这将有助于区分这两个问题。@Andreas sry没有读到足够简明的内容显然您的示例仅适用于mpare值在同一索引上?如果你看一个例子@OP想找到两个数组中最大的4个值之和?Pair必须是每个数组中的一个数字。你不能对同一数组中的两个数字进行配对。为什么你认为有两个数组可以开始?@Andreas,因为他说我们只寻找最大值的和,它不匹配不管你是否配对,这只是解决问题的另一种方法。@NirajPatel如果输入长度只有在程序接收到输入后才能知道,我该如何做“int sum”部分?创建一个for循环并对最后一个“length”进行求和元素来自arr3@Ian如果在输入之后就知道了数组长度,那么通过将它们相加,仍然可以知道第三个数组的长度。
System.out.println(highestSum(new int[] { 202, 167, 178, 18, },
                              new int[] { 467, 15, 98, 3, }));
sum_max=0;
Arrays.sort(arr1);
Arrays.sort(arr2);
n1=array1.length-1;
n2=n1;
count=n1;

while(count>=0)
{
    if(array1[n1]>=array2[n2])
     {
         n_max=array1[n1];
         n1--;
     }
     else
     {
         n_max=array2[n2];
         n2--;
     }
     sum_max += n_max;
     count--;
}