【发布时间】:2019-08-04 19:31:19
【问题描述】:
关于 SO 上的交集有一个这样的问题,但它对我没有帮助。 我有一个严格的规则要遵守。 原始解决方案
static int solution(int[] A, int[] B) {
int n = A.length;
int m = B.length;
Arrays.sort(A);
Arrays.sort(B);
int i = 0;
for (int k = 0; k < n; k++) {
if (i < m - 1 && B[i] < A[k]) i += 1;
if (A[k] == B[i]) return A[k];
}
return -1;
}
此解决方案是正确的,但并非在所有情况下都是正确的,例如 arr1={6,6,6,6} arr2={2,4,5,9,6}
它不会导致 6 所以任务是只添加两行代码来使其工作。我添加了这个
int[] acopy = Arrays.copyOf(A, A.length);
A = n > m ? A : B;
B = n > m ? B : acopy;
n = A.length;
m = B.length;
现在该任务将返回 6
但是当数组是这样的时候
int[] x1 = {0, 2, 7, 10, 23, 345, 56, 456, 767, 56, 6, 80, 6, 65}; int y1[] = {1, 4, 5, 9, 9, 9, 80, 67, 77};
它不返回 80 现在我不确定我应该添加什么,我的代码不应该更改但可以添加一行修改。
【问题讨论】:
-
我认为您需要在
for循环中添加一个for循环 -
我不需要 if 语句对吗?除了检查平等性的那个
-
你需要在循环中循环,不需要对输入数组进行排序
-
排序已经添加,在这个任务上,它的代码任务指令不能删除但可以添加
-
循环是最直接的解决方案,时间复杂度也是最优的。我认为您可以添加自己的答案并将其标记为已接受。