LeetCode-in-Ruby.github.io

56. Merge Intervals

Medium

Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.

Example 1:

Input: intervals = [[1,3],[2,6],[8,10],[15,18]]

Output: [[1,6],[8,10],[15,18]]

Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

Example 2:

Input: intervals = [[1,4],[4,5]]

Output: [[1,5]]

Explanation: Intervals [1,4] and [4,5] are considered overlapping.

Constraints:

Solution

# @param {Integer[][]} intervals
# @return {Integer[][]}
def merge(intervals)
  intervals.sort! {|a, b| a[0] <=> b[0]}
  result = []
  current = intervals[0]
  result << current

  intervals[1..].each do |next_interval|
    if current[1] >= next_interval[0]
      current[1] = [current[1], next_interval[1]].max
    else
      current = next_interval
      result << current
    end
  end

  result
end