Ответы пользователя по тегу JavaScript
  • Конвертировать массив пересекающихся интервалов в массив не пересекающихся?

    VladX
    @VladX
    Складываете все численные значения from и to в один массив, при этом в этом массиве должны лежать пары (граница, тип), где тип — это значение типа boolean (например, true — это левая граница (from), а false — правая (to)).
    Затем запускаете алгоритм быстрой сортировки на массиве.
    Затем, FOR-ом проходите по отсортированному массиву и формируете окончательный список. Список формируется примерно так: проверяем тип границы, добавляем границу в список, идём дальше. Если несколько раз подряд встречается граница одного типа, то имеет место пересечение. В этом случае для левой границы нужно запоминать только первый встретившийся элемент, а для правой — последний.
    Вот как-то так. Если не понятно объяснил, спрашивайте.

    Алгоритм работает примерно за O(N log(N) + N) = O(N log(N)), т.е. довольно быстро.
    Ответ написан
    5 комментариев