【发布时间】:2017-06-12 16:00:43
【问题描述】:
给定两个数组 A 和 B,每个数组包含 n 个整数。您需要从 A 中选择一个数字,从 B 中选择一个数字,这样两个所选数字的索引不同,并且两个所选值的总和最小。
您的目标是找到并打印这个最小值。
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
static int twinArrays(int[] ar1, int[] ar2){
// Complete this function
int minAr1 = ar1[0];
int minAr2;
int index = 0;
for(int i =0; i<ar1.length;i++) {
if(ar1[i]<minAr1) {
minAr1 = ar1[i];
index = i;
}
}
if(index == 0) {
minAr2 = ar2[1];
}else {
minAr2 =ar2[0];
}
for(int j=0;j<ar2.length;j++) {
if(j!=index && minAr2>ar2[j]) {
minAr2 =ar2[j];
}
}
return minAr1+minAr2;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
if(n>=2 && n<=1000000) {
int[] ar1 = new int[n];
for(int ar1_i = 0; ar1_i < n; ar1_i++){
int temp1 = in.nextInt();
if(temp1>=1&&temp1<=1000000) {
ar1[ar1_i] = temp1;
}
}
int[] ar2 = new int[n];
for(int ar2_i = 0; ar2_i < n; ar2_i++){
int temp2 = in.nextInt();
if(temp2>=1&&temp2<=1000000) {
ar2[ar2_i] = temp2;
}
}
int result = twinArrays(ar1, ar2);
System.out.println(result);
}
}
}
我已经实现了,它工作正常,但仍然缺少一些东西,所以如果你在这段代码中发现任何缺陷,任何人都可以给我一些线索和提示来优化我的代码
【问题讨论】:
-
如果数组包含重复值会发生什么?
-
@ΦXocę 웃 Пepeúpa ツ 如果重复值也可以正常工作 Test public void test2() { int[] ar1 = {1,1,4,1,7}; int[] ar2 = {1,1,4,1,7}; System.out.println(solution.twinArrays(ar1, ar2)); assertEquals(2, solution.twinArrays(ar1, ar2)); }
-
您能告诉我们哪些测试用例失败了吗?如果我不知道它在哪里失败,我将无能为力。因为我没有看到任何缺陷并且优化并不糟糕,但是您失败的测试用例可能是您没有执行的特定检查,我需要查看。