Skip to content

Commit 44397ef

Browse files
committed
feat: non-overlapping-intervals
1 parent 018a2de commit 44397ef

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Time complexity: O(n^2)
2+
// Space complexity: O(n)
3+
4+
/**
5+
* @param {number[][]} intervals
6+
* @return {number}
7+
*/
8+
var eraseOverlapIntervals = function (intervals) {
9+
intervals.sort((a, b) => {
10+
if (a[0] === b[0]) {
11+
return a[1] - b[1];
12+
}
13+
14+
return a[0] - b[0];
15+
});
16+
17+
const dp = Array.from({ length: intervals.length }, () => 0);
18+
19+
dp[0] = 1;
20+
21+
for (let i = 1; i < intervals.length; i++) {
22+
const [prevStart, prevEnd] = intervals[i - 1];
23+
const [currentStart, currentEnd] = intervals[i];
24+
25+
// 구간이 겹칠 때
26+
if (currentStart < prevEnd) {
27+
// 현재를 포함할 때
28+
let maxValue = 1;
29+
for (let j = i - 1; j >= 0; j--) {
30+
const [start, end] = intervals[j];
31+
32+
if (end <= currentStart) {
33+
maxValue += dp[j];
34+
break;
35+
}
36+
}
37+
38+
dp[i] = Math.max(dp[i - 1], maxValue);
39+
continue;
40+
}
41+
42+
// 구간이 겹치지 않을 때
43+
dp[i] = dp[i - 1] + 1;
44+
}
45+
46+
return intervals.length - dp.at(-1);
47+
};

0 commit comments

Comments
 (0)