File tree Expand file tree Collapse file tree 5 files changed +106
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 5 files changed +106
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * TC: O(n)
3+ * SC: O(n)
4+ * */
5+ function climbStairs ( n : number ) : number {
6+ const dp = new Array ( n + 1 ) . fill ( 0 ) ;
7+
8+ dp [ 1 ] = 1 ;
9+ dp [ 2 ] = 2 ;
10+
11+ for ( let i = 3 ; i <= n ; i ++ ) {
12+ dp [ i ] = dp [ i - 1 ] + dp [ i - 2 ] ;
13+ }
14+
15+ return dp [ n ] ;
16+ }
Original file line number Diff line number Diff line change 1+ /*
2+ * TC: O(amount * coins.length)
3+ * SC: O(amount)
4+ * */
5+ function coinChange ( coins : number [ ] , amount : number ) : number {
6+ if ( amount === 0 ) {
7+ return 0 ;
8+ }
9+
10+ const dp = new Array ( amount + 1 ) . fill ( Infinity ) ;
11+ dp [ 0 ] = 0 ;
12+
13+ for ( let i = 1 ; i <= amount ; i ++ ) {
14+ coins . forEach ( ( coin ) => {
15+ if ( coin <= i ) {
16+ dp [ i ] = Math . min ( dp [ i ] , dp [ i - coin ] + 1 ) ;
17+ }
18+ } ) ;
19+ }
20+
21+ return dp [ amount ] === Infinity ? - 1 : dp [ amount ] ;
22+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * TC: O(candidates.length ^ target / min(candidates))
3+ * SC: O(target / min(candidates)
4+ */
5+ function combinationSum ( candidates : number [ ] , target : number ) : number [ ] [ ] {
6+ const result : number [ ] [ ] = [ ] ;
7+ const dfs = ( start : number , stop : number , path : number [ ] ) => {
8+ if ( stop === 0 ) {
9+ result . push ( [ ...path ] ) ;
10+ return ;
11+ }
12+
13+ for ( let i = start ; i < candidates . length ; i ++ ) {
14+ if ( candidates [ i ] <= stop ) {
15+ path . push ( candidates [ i ] ) ;
16+ dfs ( i , stop - candidates [ i ] , path ) ;
17+ path . pop ( ) ;
18+ }
19+ }
20+ } ;
21+ dfs ( 0 , target , [ ] ) ;
22+
23+ return result ;
24+ }
Original file line number Diff line number Diff line change 1+ /*
2+ * TC: O(n)
3+ * SC: O(n)
4+ * */
5+
6+ function productExceptSelf ( nums : number [ ] ) : number [ ] {
7+ const n = nums . length ;
8+ const answer = new Array ( n ) . fill ( 1 ) ;
9+
10+ let left = 1 ;
11+ nums . forEach ( ( num , i ) => {
12+ answer [ i ] = left ;
13+ left *= num ;
14+ } ) ;
15+
16+ let right = 1 ;
17+ nums . reverse ( ) . forEach ( ( num , i ) => {
18+ answer [ n - 1 - i ] *= right ;
19+ right *= num ;
20+ } ) ;
21+
22+ return answer ;
23+ }
Original file line number Diff line number Diff line change 1+ /*
2+ * TC: O(n)
3+ * SC: O(n)
4+ * */
5+ function twoSum ( nums : number [ ] , target : number ) : number [ ] {
6+ const n = nums . length ;
7+ const answer = new Map < number , number > ( ) ;
8+
9+ for ( let i = 0 ; i < n ; i ++ ) {
10+ const diff = target - nums [ i ] ;
11+ const before = answer . get ( diff ) ;
12+
13+ if ( before ) {
14+ return [ before , i ] ;
15+ }
16+
17+ answer . set ( nums [ i ] , i ) ;
18+ }
19+
20+ return [ ] ;
21+ }
You can’t perform that action at this time.
0 commit comments