File tree Expand file tree Collapse file tree 5 files changed +76
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 5 files changed +76
-0
lines changed Original file line number Diff line number Diff line change
1
+ // T.C. O(n)
2
+ // S.C. O(1)
3
+ function climbStairs ( n : number ) : number {
4
+ let p = 0 ;
5
+ let q = 1 ;
6
+ for ( let i = 0 ; i < n ; i ++ ) {
7
+ q = q + p ;
8
+ p = q - p ;
9
+ }
10
+ return q ;
11
+ }
Original file line number Diff line number Diff line change
1
+ // T.C: O(coins.length * amount)
2
+ // S.C: O(amount)
3
+ function coinChange ( coins : number [ ] , amount : number ) : number {
4
+ if ( amount == 0 ) return 0 ;
5
+ const dp = new Array ( amount + 1 ) . fill ( Infinity ) ;
6
+ dp [ 0 ] = 0 ;
7
+ for ( let i = 1 ; i <= amount ; i ++ ) {
8
+ for ( let j = 0 ; j < coins . length ; j ++ ) {
9
+ if ( coins [ j ] <= i ) {
10
+ dp [ i ] = Math . min ( dp [ i ] , dp [ i - coins [ j ] ] + 1 ) ;
11
+ }
12
+ }
13
+ }
14
+ return dp [ amount ] === Infinity ? - 1 : dp [ amount ] ;
15
+ } ;
Original file line number Diff line number Diff line change
1
+ // T.C: O(n^t) // n: candidates.length, t: target
2
+ // S.C: O(n)
3
+ function combinationSum ( candidates : number [ ] , target : number ) : number [ ] [ ] {
4
+ const result : number [ ] [ ] = [ ] ;
5
+ function dfs ( start : number , target : number , path : number [ ] ) {
6
+ if ( target < 0 ) return ;
7
+ if ( target === 0 ) {
8
+ result . push ( [ ...path ] ) ;
9
+ return ;
10
+ }
11
+ for ( let i = start ; i < candidates . length ; i ++ ) {
12
+ path . push ( candidates [ i ] ) ;
13
+ dfs ( i , target - candidates [ i ] , path ) ;
14
+ path . pop ( ) ;
15
+ }
16
+ }
17
+ dfs ( 0 , target , [ ] ) ;
18
+ return result ;
19
+ } ;
Original file line number Diff line number Diff line change
1
+ // T.C: O(n)
2
+ // S.C: O(n)
3
+ function productExceptSelf ( nums : number [ ] ) : number [ ] {
4
+ const arr : number [ ] = new Array ( nums . length ) ;
5
+ let product = 1 ;
6
+ for ( let i = 0 ; i < nums . length ; i ++ ) {
7
+ arr [ i ] = product ;
8
+ product *= nums [ i ] ;
9
+ }
10
+
11
+ product = 1 ;
12
+ for ( let i = nums . length - 1 ; i >= 0 ; i -- ) {
13
+ arr [ i ] *= product ;
14
+ product *= nums [ i ] ;
15
+ }
16
+
17
+ return arr ;
18
+ } ;
Original file line number Diff line number Diff line change
1
+ // T.C. O(n)
2
+ // S.C. O(n)
3
+ function twoSum ( nums : number [ ] , target : number ) : number [ ] {
4
+ const sumMap = new Map < number , number > ( ) ;
5
+ for ( const [ i , num ] of nums . entries ( ) ) {
6
+ const diff = target - num ;
7
+ if ( sumMap . has ( diff ) ) {
8
+ return [ sumMap . get ( diff ) ! , i ] ;
9
+ }
10
+ sumMap . set ( num , i ) ;
11
+ }
12
+ return [ ] ;
13
+ }
You can’t perform that action at this time.
0 commit comments