【发布时间】:2017-10-20 14:34:08
【问题描述】:
任务: A 和 B 是自然数数组。 A 是一个递增排序的数组,B 是一个随机排序的数组。 K 是任意的自然数。找到一个有效的算法来确定所有可能的索引对 (i,j),使得 A[i]+B[j]=K。
这个算法效率最高吗?
public static void main(String[] args) {
int A[] = { 1, 2, 3, 4, 6, 7, 8, 11, 13, 124};
int B[] = {4, 1, 10, 5};
int k = 10;
int i = 0, n = A.length, m = B.length;
ArrayList<String> result = new ArrayList<String>();
while (i < n){
if (A[i] >= k) {
break;
}else {
int j = 0;
while(j < m) {
if (A[i] + B[j] == k) {
result.add("i = " + i + " j = " + j);
}
j++;
}
}
i++;
}
for(int z = 0; z < result.size(); z++) {
System.out.println(result.get(z));
}
}
【问题讨论】:
-
数组
A中的数字是不同的吗? -
迭代 B 中的数字,并为 B 中的每个 b,二进制搜索 A 中的 k-b。
-
"这种算法是最有效的吗" 不,你可以从 A 表的中间开始。然后根据 A[i] + B[j] 的结果向下或向上。那会更有效率,所以它不可能是最有效的。 编辑:实际上这就是@tobias_k 的提议