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