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