Skip to content

Commit dd1ff50

Browse files
committed
refactor: non-overlapping-intervals
1 parent 44397ef commit dd1ff50

File tree

1 file changed

+10
-22
lines changed

1 file changed

+10
-22
lines changed
Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// Time complexity: O(n^2)
2-
// Space complexity: O(n)
1+
// Time complexity: O(nlogn)
2+
// Space complexity: O(1)
33

44
/**
55
* @param {number[][]} intervals
@@ -14,34 +14,22 @@ var eraseOverlapIntervals = function (intervals) {
1414
return a[0] - b[0];
1515
});
1616

17-
const dp = Array.from({ length: intervals.length }, () => 0);
18-
19-
dp[0] = 1;
17+
let count = 0;
18+
let prevEnd = intervals[0][1];
2019

2120
for (let i = 1; i < intervals.length; i++) {
22-
const [prevStart, prevEnd] = intervals[i - 1];
23-
const [currentStart, currentEnd] = intervals[i];
21+
const [start, end] = intervals[i];
2422

2523
// 구간이 겹칠 때
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);
24+
if (prevEnd > start) {
25+
count++;
26+
prevEnd = Math.min(prevEnd, end);
3927
continue;
4028
}
4129

4230
// 구간이 겹치지 않을 때
43-
dp[i] = dp[i - 1] + 1;
31+
prevEnd = end;
4432
}
4533

46-
return intervals.length - dp.at(-1);
34+
return count;
4735
};

0 commit comments

Comments
 (0)