File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed
non-overlapping-intervals Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change 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+ } ;
You can’t perform that action at this time.
0 commit comments