【发布时间】:2024-01-19 20:51:01
【问题描述】:
我想迭代一个数组并找到它们的差为 2 的所有对
这是我目前所拥有的:
var numberOfCases = 5;
var diff = 2;
var input = [1,5,3,4,2];
getPossiblepairs(input);
function getPossiblepairs(input){
for(cmp in input){
for(number in input){
if((input[cmp] - input[number]) == diff){
console.log("("+input[cmp]+","+input[number]+")");
}
}
}
}
这可行,但我仍然感到内疚,因为 bigO 是 O(n^2) 使用两个 for 循环,这是唯一的方法吗?
【问题讨论】:
-
如果你真的知道数字的分布,你可以做一些算法来变得更好(这里它们是一个连续的序列,虽然是乱序的)。但是只有 5 个条目,所以 25 次迭代 O(5^2),你真的想让它比这更有效吗?
-
我更改了措辞以寻求其他方法,因为“最佳方法”将主要基于意见而被关闭。
-
对 O(N) log n 的列表进行排序。与当前元素相差 2 的元素要么是下一个元素,要么是之后的元素。这是一个 O(1) 检查。检查所有这些是O(N)。所以总体 O(N log N)
-
@Paul 仅在数字不重复时才有效
-
另一个 O(N) Pass 将相等的元素放入计数的桶中可以解决这个问题。
标签: javascript arrays performance time-complexity