File tree Expand file tree Collapse file tree 5 files changed +169
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 5 files changed +169
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * https://leetcode.com/problems/course-schedule/
3
+ * T.C. O(V + E)
4
+ * S.C. O(V + E)
5
+ */
6
+ function canFinish ( numCourses : number , prerequisites : number [ ] [ ] ) : boolean {
7
+ const graph : number [ ] [ ] = Array . from ( { length : numCourses } , ( ) => [ ] ) ;
8
+ for ( const [ course , pre ] of prerequisites ) {
9
+ graph [ pre ] . push ( course ) ;
10
+ }
11
+
12
+ const visited = new Array ( numCourses ) . fill ( false ) ;
13
+ const visiting = new Array ( numCourses ) . fill ( false ) ;
14
+
15
+ const dfs = ( course : number ) : boolean => {
16
+ if ( visited [ course ] ) return true ;
17
+ if ( visiting [ course ] ) return false ;
18
+
19
+ visiting [ course ] = true ;
20
+ for ( const neighbor of graph [ course ] ) {
21
+ if ( ! dfs ( neighbor ) ) return false ;
22
+ }
23
+ visiting [ course ] = false ;
24
+ visited [ course ] = true ;
25
+
26
+ return true ;
27
+ } ;
28
+
29
+ for ( let i = 0 ; i < numCourses ; i ++ ) {
30
+ if ( ! visited [ i ] && ! dfs ( i ) ) return false ;
31
+ }
32
+
33
+ return true ;
34
+ }
Original file line number Diff line number Diff line change
1
+ // class TreeNode {
2
+ // val: number;
3
+ // left: TreeNode | null;
4
+ // right: TreeNode | null;
5
+ // constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
6
+ // this.val = val === undefined ? 0 : val;
7
+ // this.left = left === undefined ? null : left;
8
+ // this.right = right === undefined ? null : right;
9
+ // }
10
+ // }
11
+
12
+ /**
13
+ * https://leetcode.com/problems/invert-binary-tree
14
+ * T.C. O(n)
15
+ * S.C. O(n)
16
+ */
17
+ function invertTree ( root : TreeNode | null ) : TreeNode | null {
18
+ if ( root === null ) {
19
+ return null ;
20
+ }
21
+
22
+ [ root . left , root . right ] = [ root . right , root . left ] ;
23
+ invertTree ( root . left ) ;
24
+ invertTree ( root . right ) ;
25
+
26
+ return root ;
27
+ }
28
+
29
+ /**
30
+ * T.C. O(n)
31
+ * S.C. O(n)
32
+ */
33
+ function invertTree ( root : TreeNode | null ) : TreeNode | null {
34
+ const stack : Array < TreeNode | null > = [ root ] ;
35
+
36
+ while ( stack . length > 0 ) {
37
+ const node = stack . pop ( ) ! ;
38
+
39
+ if ( node === null ) {
40
+ continue ;
41
+ }
42
+
43
+ [ node . left , node . right ] = [ node . right , node . left ] ;
44
+ stack . push ( node . left , node . right ) ;
45
+ }
46
+
47
+ return root ;
48
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * https://leetcode.com/problems/jump-game/
3
+ * T.C. O(n)
4
+ * S.C. O(1)
5
+ */
6
+ function canJump ( nums : number [ ] ) : boolean {
7
+ let max = 0 ;
8
+
9
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
10
+ if ( i > max ) return false ;
11
+ max = Math . max ( max , i + nums [ i ] ) ;
12
+ if ( max >= nums . length - 1 ) return true ;
13
+ }
14
+
15
+ return false ;
16
+ }
Original file line number Diff line number Diff line change
1
+ // class ListNode {
2
+ // val: number;
3
+ // next: ListNode | null;
4
+ // constructor(val?: number, next?: ListNode | null) {
5
+ // this.val = val === undefined ? 0 : val;
6
+ // this.next = next === undefined ? null : next;
7
+ // }
8
+ // }
9
+
10
+ /**
11
+ * https://leetcode.com/problems/merge-k-sorted-lists
12
+ * T.C. O(n * k^2) n: average length of list, k: number of lists
13
+ * S.C. O(1)
14
+ */
15
+ function mergeKLists ( lists : Array < ListNode | null > ) : ListNode | null {
16
+ if ( lists . length === 0 ) return null ;
17
+ if ( lists . length === 1 ) return lists [ 0 ] ;
18
+ return lists . reduce ( ( acc , cur ) => mergeTwoLists ( acc , cur ) , null ) ;
19
+
20
+ function mergeTwoLists ( list1 : ListNode | null , list2 : ListNode | null ) : ListNode | null {
21
+ const head = new ListNode ( ) ;
22
+ let current = head ;
23
+
24
+ while ( list1 && list2 ) {
25
+ if ( list1 . val < list2 . val ) {
26
+ current . next = list1 ;
27
+ list1 = list1 . next ;
28
+ } else {
29
+ current . next = list2 ;
30
+ list2 = list2 . next ;
31
+ }
32
+ current = current . next ;
33
+ }
34
+
35
+ current . next = list1 || list2 ;
36
+
37
+ return head . next ;
38
+ }
39
+ }
Original file line number Diff line number Diff line change
1
+ /**
2
+ * https://leetcode.com/problems/search-in-rotated-sorted-array
3
+ * T.C. O(log n)
4
+ * S.C. O(1)
5
+ */
6
+ function search ( nums : number [ ] , target : number ) : number {
7
+ let left = 0 ;
8
+ let right = nums . length - 1 ;
9
+
10
+ while ( left <= right ) {
11
+ let mid = left + ( ( right - left ) >> 1 ) ;
12
+
13
+ if ( nums [ mid ] === target ) {
14
+ return mid ;
15
+ }
16
+
17
+ if ( nums [ left ] <= nums [ mid ] ) {
18
+ if ( nums [ left ] <= target && target < nums [ mid ] ) {
19
+ right = mid - 1 ;
20
+ } else {
21
+ left = mid + 1 ;
22
+ }
23
+ } else {
24
+ if ( nums [ mid ] < target && target <= nums [ right ] ) {
25
+ left = mid + 1 ;
26
+ } else {
27
+ right = mid - 1 ;
28
+ }
29
+ }
30
+ }
31
+ return - 1 ;
32
+ }
You can’t perform that action at this time.
0 commit comments