File tree Expand file tree Collapse file tree 5 files changed +165
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 5 files changed +165
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number } numCourses
3
+ * @param {number[][] } prerequisites
4
+ * @return {boolean }
5
+ */
6
+ var canFinish = function ( numCourses , prerequisites ) {
7
+ const preMap = { } ;
8
+ for ( let i = 0 ; i < numCourses ; i ++ ) {
9
+ preMap [ i ] = [ ] ;
10
+ }
11
+ for ( const [ crs , pre ] of prerequisites ) {
12
+ preMap [ crs ] . push ( pre ) ;
13
+ }
14
+
15
+ const visitSet = new Set ( ) ;
16
+
17
+ const dfs = ( crs ) => {
18
+ if ( visitSet . has ( crs ) ) return false ;
19
+ if ( preMap [ crs ] . length === 0 ) return true ;
20
+
21
+ visitSet . add ( crs ) ;
22
+ for ( const pre of preMap [ crs ] ) {
23
+ if ( ! dfs ( pre ) ) return false ;
24
+ }
25
+ visitSet . delete ( crs ) ;
26
+ preMap [ crs ] = [ ] ;
27
+
28
+ return true ;
29
+ } ;
30
+
31
+ for ( let crs = 0 ; crs < numCourses ; crs ++ ) {
32
+ if ( ! dfs ( crs ) ) return false ;
33
+ }
34
+
35
+ return true ;
36
+ } ;
37
+
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 {TreeNode }
13
+ */
14
+ var invertTree = function ( root ) {
15
+ if ( ! root ) return null ;
16
+
17
+ // swap the children
18
+ let tmp = root . left ;
19
+ root . left = root . right ;
20
+ root . right = tmp ;
21
+
22
+ invertTree ( root . left ) ;
23
+ invertTree ( root . right ) ;
24
+
25
+ return root ;
26
+ } ;
27
+
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {boolean }
4
+ */
5
+ var canJump = function ( nums ) {
6
+ let goal = nums . length - 1 ;
7
+
8
+ for ( let i = nums . length - 1 ; i >= 0 ; i -- ) {
9
+ if ( i + nums [ i ] >= goal ) {
10
+ goal = i ;
11
+ }
12
+ }
13
+
14
+ return goal === 0 ;
15
+ } ;
16
+
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[] } lists
11
+ * @return {ListNode }
12
+ */
13
+ var mergeKLists = function ( lists ) {
14
+ if ( ! lists || lists . length === 0 ) return null ;
15
+
16
+ const mergeList = ( l1 , l2 ) => {
17
+ const dummy = new ListNode ( 0 ) ;
18
+ let current = dummy ;
19
+
20
+ while ( l1 && l2 ) {
21
+ if ( l1 . val < l2 . val ) {
22
+ current . next = l1 ;
23
+ l1 = l1 . next ;
24
+ } else {
25
+ current . next = l2 ;
26
+ l2 = l2 . next ;
27
+ }
28
+ current = current . next ;
29
+ }
30
+
31
+ current . next = l1 || l2 ;
32
+ return dummy . next ;
33
+ } ;
34
+
35
+ while ( lists . length > 1 ) {
36
+ const mergedLists = [ ] ;
37
+
38
+ for ( let i = 0 ; i < lists . length ; i += 2 ) {
39
+ const l1 = lists [ i ] ;
40
+ const l2 = ( i + 1 < lists . length ) ? lists [ i + 1 ] : null ;
41
+ mergedLists . push ( mergeList ( l1 , l2 ) ) ;
42
+ }
43
+
44
+ lists = mergedLists ;
45
+ }
46
+
47
+ return lists [ 0 ] ;
48
+ } ;
49
+
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number[] } nums
3
+ * @param {number } target
4
+ * @return {number }
5
+ */
6
+ var search = function ( nums , target ) {
7
+ let l = 0 , r = nums . length - 1 ;
8
+
9
+ while ( l <= r ) {
10
+ const mid = Math . floor ( ( l + r ) / 2 ) ;
11
+
12
+ if ( nums [ mid ] === target ) {
13
+ return mid ;
14
+ }
15
+
16
+ // left sorted portion
17
+ if ( nums [ l ] <= nums [ mid ] ) {
18
+ if ( target > nums [ mid ] || target < nums [ l ] ) {
19
+ l = mid + 1 ;
20
+ } else {
21
+ r = mid - 1 ;
22
+ }
23
+ }
24
+ // right sorted portion
25
+ else {
26
+ if ( target < nums [ mid ] || target > nums [ r ] ) {
27
+ r = mid - 1 ;
28
+ } else {
29
+ l = mid + 1 ;
30
+ }
31
+ }
32
+ }
33
+
34
+ return - 1 ;
35
+ } ;
36
+
You can’t perform that action at this time.
0 commit comments