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