(1,3), (4,6) => (1,6)
(1,3), (2,6) => (1,6)
(1,6), (2,3) => (1,6)
(1,3), (8,9) => (1,3), (8,9)
(1,3), (4,6), (8,9) => (1,6), (8,9)
(4,6), (1,2) => throw
range int start int end ranges merge(ranges): if ranges == null: throw merged = new if ranges.count() == 0: return merged start, end = 0 first = true for range in ranges: if first: first = false start = range.start end = range.end continue if range.start < start: throw new ex("ranges not sorted asc by start value.") if range.start +1 <= end: end = max(end, range.end) else merged.add(new range(start, end)) start = range.start end = range.end merged.add(new range(start, end)) return merged
[Hat tip to SD]
No comments:
Post a Comment