Javascript 查找未使用的组合
找到数组中尚未出现的组合的快速方法是什么 例如,我有一系列要点:[1,2,4,9] 我有一个连接列表[[1,2],[1,4],[1,9],[2,4],[4,9]] 因此,该列表中缺少的连接是[2,9]。因为有一个要求:每个整数必须连接到一个更大的整数Javascript 查找未使用的组合,javascript,arrays,Javascript,Arrays,找到数组中尚未出现的组合的快速方法是什么 例如,我有一系列要点:[1,2,4,9] 我有一个连接列表[[1,2],[1,4],[1,9],[2,4],[4,9]] 因此,该列表中缺少的连接是[2,9]。因为有一个要求:每个整数必须连接到一个更大的整数 上面的代码可以工作,但是for循环的数量让我觉得它相当慢。有没有更快的办法?查看通过对数组排序,您可以使用两个嵌套来完成此操作。排序采用logn,循环基本上是^2 var points = [1, 2, 4, 9]; var connections
上面的代码可以工作,但是for循环的数量让我觉得它相当慢。有没有更快的办法?查看通过对数组排序,您可以使用两个嵌套来完成此操作。排序采用logn,循环基本上是^2
var points = [1, 2, 4, 9];
var connections = [
[1, 2],
[1, 4],
[1, 9],
[2, 4],
[4, 9]
];
connections.sort();
var missing = [];
var currentIndex = 0;
for (var i = 0; i < points.length; i++) {
for (var j = i + 1; j < points.length; j++) {
if (connections[currentIndex][0] == points[i] && connections[currentIndex][1] == points[j]) {
currentIndex++;
} else {
missing.push([points[i], points[j]]);
}
}
}
console.log(missing);
您可以只迭代外部循环,直到长度为-2,并对插入的连接使用哈希表。连接的排序顺序并不重要 变量点=[1,2,4,9], 连接=[[1,2]、[1,4]、[1,9]、[2,4]、[4,9]], 缺少=[], i、 j, 一对 connected=Object.createnull; 连接。foreacha函数{ 连接的[a.join]=真; }; 对于i=0;i
console.logdiff;您的数据是否保证已排序?@TatsuyukiIshi否,连接列表未排序。
var points = [1, 2, 4, 9];
var connections = [
[1, 2],
[1, 4],
[1, 9],
[2, 4],
[4, 9]
];
connections.sort();
var missing = [];
var currentIndex = 0;
for (var i = 0; i < points.length; i++) {
for (var j = i + 1; j < points.length; j++) {
if (connections[currentIndex][0] == points[i] && connections[currentIndex][1] == points[j]) {
currentIndex++;
} else {
missing.push([points[i], points[j]]);
}
}
}
console.log(missing);