File tree Expand file tree Collapse file tree 5 files changed +159
-0
lines changed
binary-tree-maximum-path-sum Expand file tree Collapse file tree 5 files changed +159
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for a binary tree node.
3
+ * function TreeNode(val, left, right) {
4
+ * this.val = (val===undefined ? 0 : val);
5
+ * this.left = (left===undefined ? null : left);
6
+ * this.right = (right===undefined ? null : right);
7
+ * }
8
+ */
9
+
10
+ /**
11
+ * @param {TreeNode } root
12
+ * @return {number }
13
+ */
14
+ var maxPathSum = function ( root ) {
15
+ let res = [ root . val ] ;
16
+
17
+ function dfs ( node ) {
18
+ if ( ! node ) return 0 ;
19
+
20
+ let leftMax = dfs ( node . left ) ;
21
+ let rightMax = dfs ( node . right ) ;
22
+
23
+ leftMax = Math . max ( leftMax , 0 ) ;
24
+ rightMax = Math . max ( rightMax , 0 ) ;
25
+
26
+ // 경유지점 포함한 경로 최대값 업데이트
27
+ res [ 0 ] = Math . max ( res [ 0 ] , node . val + leftMax + rightMax ) ;
28
+
29
+ // 분기하지 않는 경로에서의 최대값 리턴
30
+ return node . val + Math . max ( leftMax , rightMax ) ;
31
+ }
32
+
33
+ dfs ( root ) ;
34
+ return res [ 0 ] ;
35
+ } ;
36
+
Original file line number Diff line number Diff line change
1
+ export class Solution {
2
+ /**
3
+ * @param {number } n - number of nodes
4
+ * @param {number[][] } edges - undirected edges
5
+ * @return {boolean }
6
+ */
7
+ validTree ( n , edges ) {
8
+ if ( n === 0 ) return true ;
9
+
10
+ // 인접 리스트 생성
11
+ const adj = { } ;
12
+ for ( let i = 0 ; i < n ; i ++ ) {
13
+ adj [ i ] = [ ] ;
14
+ }
15
+ for ( const [ n1 , n2 ] of edges ) {
16
+ adj [ n1 ] . push ( n2 ) ;
17
+ adj [ n2 ] . push ( n1 ) ;
18
+ }
19
+
20
+ const visit = new Set ( ) ;
21
+
22
+ const dfs = ( i , prev ) => {
23
+ if ( visit . has ( i ) ) return false ;
24
+
25
+ visit . add ( i ) ;
26
+
27
+ for ( const j of adj [ i ] ) {
28
+ if ( j === prev ) continue ;
29
+ if ( ! dfs ( j , i ) ) return false ;
30
+ }
31
+
32
+ return true ;
33
+ } ;
34
+
35
+ return dfs ( 0 , - 1 ) && visit . size === n ;
36
+ }
37
+ }
38
+
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[][] } intervals
3
+ * @return {number[][] }
4
+ */
5
+ var merge = function ( intervals ) {
6
+ if ( intervals . length === 0 ) return [ ] ;
7
+
8
+ // 시작값 기준으로 정렬
9
+ intervals . sort ( ( a , b ) => a [ 0 ] - b [ 0 ] ) ;
10
+
11
+ const output = [ intervals [ 0 ] ] ;
12
+
13
+ for ( let i = 1 ; i < intervals . length ; i ++ ) {
14
+ const [ start , end ] = intervals [ i ] ;
15
+ const lastEnd = output [ output . length - 1 ] [ 1 ] ;
16
+
17
+ if ( start <= lastEnd ) {
18
+ output [ output . length - 1 ] [ 1 ] = Math . max ( lastEnd , end ) ;
19
+ } else {
20
+ output . push ( [ start , end ] ) ;
21
+ }
22
+ }
23
+
24
+ return output ;
25
+ } ;
26
+
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {number }
4
+ */
5
+ var missingNumber = function ( nums ) {
6
+ let res = nums . length ;
7
+
8
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
9
+ res += i - nums [ i ] ;
10
+ }
11
+
12
+ return res ;
13
+ } ;
14
+
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for singly-linked list.
3
+ * function ListNode(val, next) {
4
+ * this.val = (val===undefined ? 0 : val)
5
+ * this.next = (next===undefined ? null : next)
6
+ * }
7
+ */
8
+
9
+ /**
10
+ * @param {ListNode } head
11
+ * @return {void } Do not return anything, modify head in-place instead.
12
+ */
13
+ var reorderList = function ( head ) {
14
+ if ( ! head || ! head . next ) return ;
15
+
16
+ let slow = head , fast = head . next ;
17
+ while ( fast && fast . next ) {
18
+ slow = slow . next ;
19
+ fast = fast . next . next ;
20
+ }
21
+
22
+ let second = slow . next ;
23
+ let prev = null ;
24
+ slow . next = null ;
25
+ while ( second ) {
26
+ let tmp = second . next ;
27
+ second . next = prev ;
28
+ prev = second ;
29
+ second = tmp ;
30
+ }
31
+
32
+ let first = head ;
33
+ second = prev ;
34
+ while ( second ) {
35
+ let tmp1 = first . next ;
36
+ let tmp2 = second . next ;
37
+
38
+ first . next = second ;
39
+ second . next = tmp1 ;
40
+
41
+ first = tmp1 ;
42
+ second = tmp2 ;
43
+ }
44
+ } ;
45
+
You can’t perform that action at this time.
0 commit comments