Java中用索引求第一对最大和

Java中用索引求第一对最大和,java,arrays,list,arraylist,indices,Java,Arrays,List,Arraylist,Indices,我有一个代码,其中我必须打印两个长度相同的数组之间的最大和的第一对索引。arr1的第一个值i和arr2的第二个值j。我成功地找到了最大值为7的值对及其指数(有两对和为7)。但我只需要打印最大和的第一对,它最接近数组的第一个元素 import java.util.ArrayList; import java.util.List; class maximal_sum { static void kLargestPair(int[] arr1, int n1, int[] arr2, int

我有一个代码,其中我必须打印两个长度相同的数组之间的最大和的第一对索引。arr1的第一个值i和arr2的第二个值j。我成功地找到了最大值为7的值对及其指数(有两对和为7)。但我只需要打印最大和的第一对,它最接近数组的第一个元素

import java.util.ArrayList;
import java.util.List;

class maximal_sum
{
    static void kLargestPair(int[] arr1, int n1, int[] arr2, int n2, int k)
    {
        if (k > n1*n2)
        {
            System.out.print("k pairs don't exist");
            return ;
        }

        int index2[] = new int[n1];

        while (k > 0)
        {
            int max_sum = Integer.MIN_VALUE;
            int max_index = 0;

            for (int i1 = 0; i1 < n1; i1++)
            {
                if (index2[i1] < n2 &&
                        arr1[i1] + arr2[index2[i1]] > max_sum)
                {
                    max_index = i1;

                    max_sum = arr1[i1] + arr2[index2[i1]];
                    List<int[]> result = new ArrayList<int[]>();

                    result.add(new int[]{arr1[max_index],arr2[index2[max_index]]});

                    if(index2[max_index] > max_index) {

                        System.out.print("(" + arr1[max_index] + ", " +
                                arr2[index2[max_index]] + ") "); 
                        //here prints the pair of values: (6,1) (4,3)
                        //we just need to print (4,3) because it comes before (6,1) according to the indices

                        System.out.print("(" + max_index + ", " +
                                index2[max_index] + ") ");
                       //here prints the pair of indices: (2,3) (0,1)
                       //we just need to print (0,1) because it comes before (2,3) according to the indices

                    }


                }
            }

            index2[max_index]++;
            k--;
        }
    }

    public static void main (String[] args)
    {
        int[] arr1 = {4, -8, 6, 0};
        int n1 = arr1.length;

        int[] arr2 = {-10 ,3, 1, 1};
        int n2 = arr2.length;

        int k = 6;
        kLargestPair( arr1, n1, arr2, n2, k);
    }
}
import java.util.ArrayList;
导入java.util.List;
类极大和
{
静态无效kLargestPair(int[]arr1、int[]n1、int[]arr2、int n2、int k)
{
如果(k>n1*n2)
{
系统输出打印(“k对不存在”);
返回;
}
int index2[]=新的int[n1];
而(k>0)
{
int max_sum=整数.MIN_值;
int max_指数=0;
对于(int i1=0;i1max_sum)
{
最大指数=i1;
max_sum=arr1[i1]+arr2[index2[i1]];
列表结果=新建ArrayList();
添加(新的int[]{arr1[max_索引]、arr2[index2[max_索引]]});
if(index2[最大索引]>最大索引){
系统输出打印(“+arr1[max_index]”,“+
arr2[index2[max_index]]+”);
//这里打印这对值:(6,1)(4,3)
//我们只需要打印(4,3),因为根据索引,它位于(6,1)之前
系统输出打印(“+max_index+”,“+
index2[最大指数]+”);
//这里打印一对索引:(2,3)(0,1)
//我们只需要打印(0,1),因为根据索引,它位于(2,3)之前
}
}
}
index2[最大指数]+;
k--;
}
}
公共静态void main(字符串[]args)
{
int[]arr1={4,-8,6,0};
int n1=arr1.1长度;
int[]arr2={-10,3,1,1};
int n2=arr2.5长度;
int k=6;
kLargestPair(arr1、n1、arr2、n2、k);
}
}

我不清楚为什么要在循环时打印最大值,为什么要循环六次(k=6),而不是四次(即数组的长度)。我不理解您使用的
k
,它的意图是什么

为了更好地构造代码,首先循环遍历数组之间的每个可能的数字组合并计算总和。存储对最大总和和关联索引的引用。计算完成后,简单打印索引的最大和。这必须在所有计算完成后进行

代码:

static void kLargestPair(int[] arr1, int[] arr2) {
   int biggestSum = Integer.MIN_VALUE; //storing reference to biggest sum
   int biggestIndexArr1; //storing reference to biggest index in arr1
   int biggestIndexArr2; //storing reference to biggest index in arr2
   int currentSum; //stroing reference to current calculated sum for the current calculation

   for(int indexArr1 = 0; indexArr1 < arr1.length; indexArr1++) { //Nested for loops to calculate every possible sum in the two arrays
      for(int indexArr2 = 0; indexArr2 < arr2.length; indexArr2++) {
         currentSum = arr1[indexArr1] + arr2[indexArr2]; //calculate current sum
         if(currentSum > biggestSum) { //By only checking > instead of >= only the first encounter of the biggest sum will be stored (getting a sum as big as the current biggest sum will not store)
             biggestSum = currentSum;
             biggestIndexArr1 = indexArr1;
             biggestIndexArr2 = indexArr2;
         }
      }
   } 
   System.out.println("Biggest sum is " + biggestSum + " at index (" + biggestIndexArr1 + "," + biggestIndexArr2 + ")");
}

public static void main (String[] args)
    {
        int[] arr1 = {4, -8, 6, 0};
        int[] arr2 = {-10 ,3, 1, 1};   
        kLargestPair( arr1, arr2);
    }
static void kLargestPair(int[]arr1,int[]arr2){
int biggestSum=Integer.MIN_VALUE;//存储对最大和的引用
int biggestIndexArr1;//存储对arr1中最大索引的引用
int biggestIndexArr2;//存储对arr2中最大索引的引用
int currentSum;//当前计算的当前计算和的行程引用
for(int indexArr1=0;indexArr1biggestSum){//By only checking>而不是>=只存储最大和的第一次相遇(获取与当前最大和一样大的和不会存储)
最大总和=当前总和;
biggestIndexArr1=indexArr1;
最大指数r2=指数r2;
}
}
} 
System.out.println(“索引(“+biggestIndexArr1+”,“+biggestIndexArr2+”)处的最大和为“+biggestSum+”);
}
公共静态void main(字符串[]args)
{
int[]arr1={4,-8,6,0};
int[]arr2={-10,3,1,1};
kLargestPair(arr1、arr2);
}