File tree Expand file tree Collapse file tree 5 files changed +121
-0
lines changed
non-overlapping-intervals Expand file tree Collapse file tree 5 files changed +121
-0
lines changed Original file line number Diff line number Diff line change
1
+ var insert = function ( intervals , newInterval ) {
2
+ let result = [ ] ;
3
+ let i = 0 ;
4
+
5
+ // 1. Add all intervals before the new interval
6
+ while ( i < intervals . length && intervals [ i ] [ 1 ] < newInterval [ 0 ] ) {
7
+ result . push ( intervals [ i ] ) ;
8
+ i ++ ;
9
+ }
10
+
11
+ // 2. Merge all overlapping intervals with new interval
12
+ while ( i < intervals . length && intervals [ i ] [ 0 ] <= newInterval [ 1 ] ) {
13
+ newInterval [ 0 ] = Math . min ( newInterval [ 0 ] , intervals [ i ] [ 0 ] ) ;
14
+ newInterval [ 1 ] = Math . max ( newInterval [ 1 ] , intervals [ i ] [ 1 ] ) ;
15
+ i ++ ;
16
+ }
17
+ result . push ( newInterval ) ;
18
+
19
+ // 3. Add all intervals after the new interval
20
+ while ( i < intervals . length && intervals [ i ] [ 1 ] >= newInterval [ 0 ] ) {
21
+ result . push ( intervals [ i ] ) ;
22
+ i ++ ;
23
+ }
24
+
25
+ return result ;
26
+ } ;
27
+
28
+ // TC = O(n)
29
+ // SC = O(n)
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ /**
3
+ * @param {Interval[] } intervals
4
+ * @returns {number }
5
+ */
6
+ minMeetingRooms ( intervals ) {
7
+ // Edge case
8
+ if ( intervals . length === 0 ) return 0 ;
9
+
10
+ let startTimes = intervals . map ( ( interval ) => interval . start ) ;
11
+ let endTimes = intervals . map ( ( interval ) => interval . end ) ;
12
+
13
+ startTimes . sort ( ( a , b ) => a - b ) ;
14
+ endTimes . sort ( ( a , b ) => a - b ) ;
15
+
16
+ let roomNeeded = 0 ;
17
+ let endIndex = 0 ;
18
+
19
+ for ( let i = 0 ; i < intervals . length ; i ++ ) {
20
+ if ( startTimes [ i ] < endTimes [ endIndex ] ) roomNeeded ++ ;
21
+ else endIndex ++ ;
22
+ }
23
+
24
+ return roomNeeded ;
25
+ }
26
+ }
27
+
28
+ // TC: O(nlogn)
29
+ // SC: O(n)
Original file line number Diff line number Diff line change
1
+ var merge = function ( intervals ) {
2
+ // Sort intervals with first start number
3
+ intervals . sort ( ( a , b ) => a [ 0 ] - b [ 0 ] ) ;
4
+ let result = [ ] ;
5
+ let currentInterval = intervals [ 0 ] ;
6
+
7
+ for ( let i = 1 ; i < intervals . length ; i ++ ) {
8
+ if ( currentInterval [ 1 ] >= intervals [ i ] [ 0 ] ) {
9
+ currentInterval [ 1 ] = Math . max ( currentInterval [ 1 ] , intervals [ i ] [ 1 ] ) ;
10
+ } else {
11
+ result . push ( currentInterval ) ;
12
+ currentInterval = intervals [ i ] ;
13
+ }
14
+ }
15
+
16
+ result . push ( currentInterval ) ;
17
+
18
+ return result ;
19
+ } ;
20
+
21
+ // TC: O(nlogn)
22
+ // SC: O(n)
Original file line number Diff line number Diff line change
1
+ var eraseOverlapIntervals = function ( intervals ) {
2
+ let count = 0 ;
3
+ intervals . sort ( ( a , b ) => a [ 1 ] - b [ 1 ] ) ;
4
+ let currentEnd = intervals [ 0 ] [ 1 ] ;
5
+
6
+ for ( let i = 1 ; i < intervals . length ; i ++ ) {
7
+ if ( currentEnd > intervals [ i ] [ 0 ] ) {
8
+ count ++ ;
9
+ } else {
10
+ currentEnd = intervals [ i ] [ 1 ] ;
11
+ }
12
+ }
13
+
14
+ return count ;
15
+ } ;
16
+
17
+ // TC: O(nlogn)
18
+ // SC: O(1)
Original file line number Diff line number Diff line change
1
+ var rotate = function ( matrix ) {
2
+ let top = 0 ,
3
+ bottom = matrix . length - 1 ;
4
+ let left , right ;
5
+
6
+ while ( top < bottom ) {
7
+ ( left = top ) , ( right = bottom ) ;
8
+
9
+ for ( let i = 0 ; i < bottom - top ; i ++ ) {
10
+ const topLeft = matrix [ top ] [ left + i ] ;
11
+ matrix [ top ] [ left + i ] = matrix [ bottom - i ] [ left ] ;
12
+ matrix [ bottom - i ] [ left ] = matrix [ bottom ] [ right - i ] ;
13
+ matrix [ bottom ] [ right - i ] = matrix [ top + i ] [ right ] ;
14
+ matrix [ top + i ] [ right ] = topLeft ;
15
+ }
16
+
17
+ top ++ ;
18
+ bottom -- ;
19
+ }
20
+ } ;
21
+
22
+ // TC: O(n^2)
23
+ // SC: O(1)
You can’t perform that action at this time.
0 commit comments