Skip to content

Commit 0313d60

Browse files
committed
finish 56
1 parent 4440483 commit 0313d60

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

56. Merge Intervals.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* 56. Merge Intervals
3+
*
4+
* Given a collection of intervals, merge all overlapping intervals.
5+
*
6+
* Example 1:
7+
*
8+
* Input: [[1,3],[2,6],[8,10],[15,18]]
9+
* Output: [[1,6],[8,10],[15,18]]
10+
* Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
11+
* Example 2:
12+
*
13+
* Input: [[1,4],[4,5]]
14+
* Output: [[1,5]]
15+
* Explanation: Intervals [1,4] and [4,5] are considerred overlapping.
16+
*/
17+
18+
/**
19+
* Definition for an interval.
20+
* function Interval(start, end) {
21+
* this.start = start;
22+
* this.end = end;
23+
* }
24+
*/
25+
/**
26+
* @param {Interval[]} intervals
27+
* @return {Interval[]}
28+
*/
29+
var merge = function(intervals) {
30+
var len = intervals.length;
31+
var res = [];
32+
var a = null;
33+
var b = null;
34+
35+
intervals.sort((c, d) => (c.start - d.start));
36+
37+
for (var i = 0; i < len; i++) {
38+
a = res[res.length - 1];
39+
b = intervals[i];
40+
if (overlap(a, b)) {
41+
a.start = Math.min(a.start, b.start);
42+
a.end = Math.max(a.end, b.end);
43+
} else {
44+
res.push(new Interval(b.start, b.end));
45+
}
46+
}
47+
48+
return res;
49+
};
50+
51+
var overlap = function (a, b) {
52+
if (!a || !b) return false;
53+
if (b.start <= a.end && a.end <= b.end) return true;
54+
if (a.start <= b.end && b.end <= a.end) return true;
55+
return false;
56+
};
57+
58+
// 先排序,后操作
59+
// 也可以边操作边排序

0 commit comments

Comments
 (0)