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