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