File tree Expand file tree Collapse file tree 5 files changed +172
-0
lines changed
binary-tree-maximum-path-sum Expand file tree Collapse file tree 5 files changed +172
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for a binary tree node.
3+ * class TreeNode {
4+ * val: number
5+ * left: TreeNode | null
6+ * right: TreeNode | null
7+ * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+ * this.val = (val===undefined ? 0 : val)
9+ * this.left = (left===undefined ? null : left)
10+ * this.right = (right===undefined ? null : right)
11+ * }
12+ * }
13+ */
14+
15+ // Time Complexity: O(n)
16+ // Space Complexity: O(h) where h is the height of the tree
17+ function maxPathSum ( root : TreeNode | null ) : number {
18+ let maximumSum = - Infinity ;
19+
20+ const dfs = ( node : TreeNode | null ) => {
21+ if ( ! node ) return 0 ;
22+
23+ let leftResult = dfs ( node . left ) ;
24+ let rightResult = dfs ( node . right ) ;
25+
26+ leftResult = Math . max ( 0 , leftResult ) ;
27+ rightResult = Math . max ( 0 , rightResult ) ;
28+
29+ maximumSum = Math . max ( maximumSum , node . val + leftResult + rightResult ) ;
30+
31+ return node . val + Math . max ( leftResult , rightResult ) ;
32+ } ;
33+
34+ dfs ( root ) ;
35+
36+ return maximumSum ;
37+ }
Original file line number Diff line number Diff line change 1+ // Time Complexity: O(n)
2+ // Space Complexity: O(n)
3+ export class Solution {
4+ /**
5+ * @param n: An integer
6+ * @param edges: a list of undirected edges
7+ * @return : true if it's a valid tree, or false
8+ */
9+ validTree ( n : number , edges : number [ ] [ ] ) : boolean {
10+ if ( n === 0 ) return true ;
11+ if ( edges . length !== n - 1 ) return false ;
12+
13+ const graph : number [ ] [ ] = Array . from ( { length : n } , ( ) => [ ] ) ;
14+
15+ for ( const [ s , e ] of edges ) {
16+ graph [ s ] . push ( e ) ;
17+ graph [ e ] . push ( s ) ;
18+ }
19+
20+ const visited = new Set < number > ( ) ;
21+
22+ const queue = [ 0 ] ;
23+ visited . add ( 0 ) ;
24+
25+ let pointer = 0 ;
26+ while ( pointer < queue . length ) {
27+ const currentNode = queue [ pointer ++ ] ;
28+
29+ for ( const nextNode of graph [ currentNode ] ) {
30+ if ( ! visited . has ( nextNode ) ) {
31+ queue . push ( nextNode ) ;
32+ visited . add ( nextNode ) ;
33+ }
34+ }
35+ }
36+
37+ return visited . size === n ;
38+ }
39+ }
Original file line number Diff line number Diff line change 1+ // Time Complexity: O(n log n)
2+ // Space Complexity: O(n)
3+ function merge ( intervals : number [ ] [ ] ) : number [ ] [ ] {
4+ const merged : number [ ] [ ] = [ ] ;
5+
6+ intervals . sort ( ( a , b ) => a [ 0 ] - b [ 0 ] ) ;
7+
8+ for ( const [ currentStart , currentEnd ] of intervals ) {
9+ if ( merged . length === 0 || merged [ merged . length - 1 ] [ 1 ] < currentStart ) {
10+ merged . push ( [ currentStart , currentEnd ] ) ;
11+ } else {
12+ const lastMerged = merged [ merged . length - 1 ] ;
13+ lastMerged [ 1 ] = Math . max ( lastMerged [ 1 ] , currentEnd ) ;
14+ }
15+ }
16+
17+ return merged ;
18+ }
Original file line number Diff line number Diff line change 1+ // Time Complexity: O(n)
2+ // Space Complexity: O(1)
3+ function missingNumber ( nums : number [ ] ) : number {
4+ const n = nums . length ;
5+
6+ const expectedSum = ( n * ( n + 1 ) ) / 2 ;
7+ const currentSum = nums . reduce ( ( acc , curr ) => acc + curr , 0 ) ;
8+
9+ return expectedSum - currentSum ;
10+ }
11+
12+ // Time Complexity: O(n^2)
13+ // Space Complexity: O(1)
14+ function missingNumber ( nums : number [ ] ) : number {
15+ const n = nums . length ;
16+
17+ for ( let i = 0 ; i <= n ; i ++ ) {
18+ if ( ! nums . includes ( i ) ) return i ;
19+ }
20+
21+ return - 1 ;
22+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for singly-linked list.
3+ * class ListNode {
4+ * val: number
5+ * next: ListNode | null
6+ * constructor(val?: number, next?: ListNode | null) {
7+ * this.val = (val===undefined ? 0 : val)
8+ * this.next = (next===undefined ? null : next)
9+ * }
10+ * }
11+ */
12+
13+ // Time Complexity: O(n)
14+ // Space Complexity: O(1)
15+ /**
16+ Do not return anything, modify head in-place instead.
17+ */
18+ function reorderList ( head : ListNode | null ) : void {
19+ if ( ! head || ! head . next || ! head . next . next ) return ;
20+
21+ let slow : ListNode | null = head ;
22+ let fast : ListNode | null = head ;
23+
24+ // find central node
25+ while ( fast && fast . next ) {
26+ slow = slow . next ;
27+ fast = fast . next . next ;
28+ }
29+
30+ let secondHalf = slow . next ;
31+ slow . next = null ;
32+
33+ // reverse secondHalf
34+ let prev = null ;
35+ let curr = secondHalf ;
36+ while ( curr ) {
37+ const nextTemp = curr . next ;
38+ curr . next = prev ;
39+ prev = curr ;
40+ curr = nextTemp ;
41+ }
42+
43+ let first = head ;
44+ let second = prev ;
45+
46+ while ( second ) {
47+ const firstNext = first . next ;
48+ const secondNext = second . next ;
49+
50+ first . next = second ;
51+ second . next = firstNext ;
52+
53+ first = firstNext ;
54+ second = secondNext ;
55+ }
56+ }
You can’t perform that action at this time.
0 commit comments