【发布时间】:2014-09-29 11:26:25
【问题描述】:
我正在研究以下示例
Given: 2 sorted arrays of integers(e.g. A = [1,2,3,4,5], B = [6, 7, 8, 9, 10]) and answer(e.g 13)
Find: What I have to do is to find pair of indices(1 in each array) of those two elements in both arrays so when I add them then it should be equal to the given answer.
我使用了以下 2 个解决方案。但是他们两个的问题是我正在循环遍历两个数组。首先,我遍历第一个数组并在其中循环 通过第二个数组。并在这两个索引上添加元素,看看它的添加是否等于答案。它工作正常并输出正确的答案。问题是 表现。如果我们在两个数组中都有 10,000 个整数,那么这些循环将占用大量资源,例如时间、CPU 和内存来执行并得到答案。
如何以更有效的方式解决上述特定问题?
function find (A1, A2, ans) {
var a = [];
for (var i = 0, len1 = A1.length; i < len1; i++) {
for (var j = 0, len2 = A2.length; j < len2; j++) {
if (ans === A1[i] + A2[j]) {
a.push(i + ', ' + j);
}
}
}
return a;
}
秒
function search (A, B, ans) {
var arr = [];
A.map(function (v, i) {
B.filter(function (val, ind) {
if (ans === v + val) arr.push(i + ', ' +ind);
});
});
return arr;
}
【问题讨论】:
-
找不到匹配项时会发生什么(例如您的示例中的 answer = 16)?
-
那么它应该返回 false/error。
-
迭代第一个数组并在第二个中使用二进制搜索。时间复杂度为 O(n log m)。您当前的时间复杂度为 O(n * m)。二进制搜索将节省您的时间。
-
这是一个 jQuery 问题?
-
@Md.Yusuf 这将是 O(N log M)。
标签: javascript jquery arrays algorithm