-
Notifications
You must be signed in to change notification settings - Fork 39
/
Copy pathmerge_intervals.rb
39 lines (33 loc) · 925 Bytes
/
merge_intervals.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# https://leetcode.com/problems/merge-intervals/
#
# Given a collection of intervals, merge all overlapping intervals.
#
# For example:
#
# Given [1, 3], [2, 6], [8, 10], [15, 18],
# Return [1, 6], [8, 10], [15, 18].
# Definition for an interval.
# class Interval
# attr_accessor :start, :end
# def initialize(s=0, e=0)
# @start = s
# @end = e
# end
# end
# @param {Interval[]} intervals
# @return {Interval[]}
def merge(intervals)
return [] if intervals.empty?
intervals = intervals.sort { |x, y| x.start <=> y.start }
result, newinterval = [], Interval.new(intervals[0].start, intervals[0].end)
intervals.each do |interval|
if interval.start <= newinterval.end
newinterval.end = interval.end if newinterval.end < interval.end
else
result << newinterval
newinterval = Interval.new(interval.start, interval.end)
end
end
result << newinterval
result
end