DEV Community

Discussion on: Merge Intervals

Collapse
 
lexlohr profile image
Alex Lohr

Not sure if in JS sorting isn't maybe even slower than a naive write and read approach:

const mergeIntervals = (intervals) => intervals
  .reduce((set, [start, end]) => {
    for (let index = start; index <= end; index++) {
      set[index] = true
    }
    return set
  }, [])
  .reduce((merged, on, index, set) => {
    const last = set[index - 1]
    if (on && last) {
      merged[merged.length - 1][1] = index
    } else if (on && !last) {
      merged.push([index, index])
    }
    return merged
  }, [])
Enter fullscreen mode Exit fullscreen mode

Warning: array methods will skip empty parts of sparse arrays, which is why last cannot be taken from the last operation.