File tree Expand file tree Collapse file tree 5 files changed +122
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 5 files changed +122
-0
lines changed Original file line number Diff line number Diff line change 1+ function canFinish ( numCourses : number , prerequisites : number [ ] [ ] ) : boolean {
2+ const graph : number [ ] [ ] = Array . from ( { length : numCourses } , ( ) => [ ] )
3+ for ( const [ course , prereq ] of prerequisites ) {
4+ graph [ course ] . push ( prereq )
5+ }
6+ const traversing = new Set < number > ( )
7+ const finished = new Set < number > ( )
8+
9+ const finish = ( crs : number ) : boolean => {
10+ if ( traversing . has ( crs ) ) return false
11+ if ( finished . has ( crs ) ) return true
12+
13+ traversing . add ( crs )
14+ for ( const pre of graph [ crs ] ) {
15+ if ( ! finish ( pre ) ) return false
16+ }
17+ traversing . delete ( crs )
18+ finished . add ( crs )
19+ return true
20+ }
21+ for ( let crs = 0 ; crs < numCourses ; crs ++ ) {
22+ if ( ! finish ( crs ) ) return false
23+ }
24+ return true
25+ } ;
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+ function invertTree ( root : TreeNode | null ) : TreeNode | null {
16+ if ( root == null ) return null
17+ const temp = root . left
18+ root . left = root . right
19+ root . right = temp
20+
21+ invertTree ( root . left )
22+ invertTree ( root . right )
23+ return root
24+ } ;
Original file line number Diff line number Diff line change 1+ function canJump ( nums : number [ ] ) : boolean {
2+ const memo : boolean [ ] = new Array ( nums . length ) . fill ( null )
3+ const dfs = ( start : number ) : boolean => {
4+ if ( start >= nums . length - 1 ) {
5+ return true
6+ }
7+ if ( memo [ start ] != null ) return memo [ start ]
8+ const maxJump = nums [ start ]
9+ for ( let i = 1 ; i <= maxJump ; i ++ ) {
10+ if ( dfs ( start + i ) ) {
11+ memo [ start ] = true
12+ return true
13+ }
14+ }
15+ memo [ start ] = false
16+ return false
17+ }
18+ return dfs ( 0 )
19+ } ;
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+ function mergeKLists ( lists : Array < ListNode | null > ) : ListNode | null {
14+ const tempArray : Array < ListNode > = [ ]
15+ lists . forEach ( ( node ) => {
16+ while ( node ) {
17+ tempArray . push ( node )
18+ node = node . next
19+ }
20+ } )
21+ tempArray . sort ( ( node1 , node2 ) => node1 . val - node2 . val )
22+ let result = tempArray [ 0 ] ?? null
23+ tempArray . forEach ( ( node , index , arr ) => {
24+ node . next = arr [ index + 1 ] ?? null
25+ } )
26+ return result
27+ } ;
Original file line number Diff line number Diff line change 1+ function search ( nums : number [ ] , target : number ) : number {
2+ // return nums.indexOf(target)
3+ let left = 0
4+ let right = nums . length - 1
5+
6+ while ( left <= right ) {
7+ const mid = Math . floor ( ( left + right ) / 2 )
8+ if ( nums [ mid ] === target ) {
9+ return mid
10+ }
11+
12+ if ( nums [ left ] <= nums [ mid ] ) {
13+ if ( target >= nums [ left ] && target < nums [ mid ] ) {
14+ right = mid - 1
15+ } else {
16+ left = mid + 1
17+ }
18+ } else {
19+ if ( target > nums [ mid ] && target <= nums [ right ] ) {
20+ left = mid + 1
21+ } else {
22+ right = mid - 1
23+ }
24+ }
25+ }
26+ return - 1
27+ } ;
You can’t perform that action at this time.
0 commit comments