Если у меня есть следующие массивы, с каждым элементом, представляющих пары целочисленных диапазонами:Отличия Ranges
var a = [[0, 47], [50, 51], [53, 53], [55, 55], [58, 97], [101, 101], [103, 1114111]];
var b = [[48, 57], [97, 102]];
Я использую this code, чтобы вычислить пересечение:
var output = [];
for (var i = 0; i < a.length; ++i) {
for (var j = 0; j < b.length; ++j) {
var intersection = [
Math.max(a[i][0], b[j][0]),
Math.min(a[i][1], b[j][1]), ];
if (intersection[0] <= intersection[1]) {
output.push(intersection)
}
}
}
console.log(JSON.stringify(output));
[ [ 50, 51 ], [ 53, 53 ], [ 55, 55 ], [ 97, 97 ], [ 101, 101 ] ]
Я также необходимо, чтобы вычислил разницу (все значения 0..1114111, за исключением диапазонов, которые пересекаются выше).
Что такое эффективный способ сделать это?
Пробовали ли вы этот код? Что случилось/была проблема? Какие результаты вы ожидали? – Xotic750
@ Xotic750 это O (n^2), где O (n log n) возможно. –
@ Xotic750: код, который я связал, работает безупречно (вы можете видеть его вывод на stdout), но он вычисляет пересечение, а не * разность *, что и я пытаюсь выяснить. Я напишу ожидаемый разностный вывод немного. –