File tree Expand file tree Collapse file tree 5 files changed +211
-0
lines changed
product-of-array-except-self Expand file tree Collapse file tree 5 files changed +211
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * @description
3+ * brainstorming:
4+ * Dynamic Programming
5+ *
6+ * time complexity: O(n)
7+ * space complexity: O(n)
8+ */
9+
10+ var climbStairs = function ( n ) {
11+ const dp = Array . from ( { length : n + 1 } , ( ) => 0 ) ;
12+ dp [ 1 ] = 1 ;
13+ dp [ 2 ] = 2 ;
14+
15+ for ( let i = 3 ; i < n + 1 ; i ++ ) dp [ i ] = dp [ i - 1 ] + dp [ i - 2 ] ;
16+
17+ return dp [ n ] ;
18+ } ;
Original file line number Diff line number Diff line change 1+ /**
2+ * @description
3+ * brainstorming:
4+ * 1. asc sort + division calculate
5+ * 2. bfs + memoization
6+ *
7+ * strategy:
8+ * bfs + memoization
9+ *
10+ * reason:
11+ * Tried with brainstorming 1 but test case is false
12+ *
13+ * time complexity: O(n^k)
14+ * space complexity: O(n)
15+ */
16+ class Node {
17+ constructor ( val ) {
18+ this . value = val ;
19+ this . next = null ;
20+ }
21+ }
22+
23+ class CustomQueue {
24+ constructor ( ) {
25+ this . front = null ;
26+ this . rear = null ;
27+ this . size = 0 ;
28+ }
29+
30+ push ( val ) {
31+ const node = new Node ( val ) ;
32+
33+ if ( this . size === 0 ) {
34+ this . front = node ;
35+ this . rear = node ;
36+ } else {
37+ this . rear . next = node ;
38+ this . rear = node ;
39+ }
40+
41+ this . size ++ ;
42+ }
43+
44+ pop ( ) {
45+ if ( this . size === 0 ) return null ;
46+ const node = this . front ;
47+ this . front = this . front . next ;
48+ this . size -- ;
49+ if ( this . size === 0 ) this . rear = null ;
50+
51+ return node . value ;
52+ }
53+ }
54+
55+ var coinChange = function ( coins , amount ) {
56+ const queue = new CustomQueue ( ) ;
57+ const memoSet = new Set ( ) ;
58+
59+ if ( amount === 0 ) return 0 ;
60+
61+ for ( const coin of coins ) {
62+ if ( amount === coin ) return 1 ;
63+
64+ queue . push ( coin ) ;
65+ memoSet . add ( coin ) ;
66+ }
67+
68+ let count = 1 ;
69+
70+ while ( queue . size ) {
71+ count ++ ;
72+ let depthSize = queue . size ;
73+
74+ while ( depthSize -- ) {
75+ const sum = queue . pop ( ) ;
76+
77+ for ( const coin of coins ) {
78+ const nextSum = sum + coin ;
79+
80+ if ( memoSet . has ( nextSum ) ) continue ;
81+ if ( amount === nextSum ) return count ;
82+ if ( amount > nextSum ) queue . push ( nextSum ) ;
83+
84+ memoSet . add ( nextSum ) ;
85+ }
86+ }
87+ }
88+
89+ return - 1 ;
90+ } ;
Original file line number Diff line number Diff line change 1+ /**
2+ * @description
3+ * brainstorming:
4+ * dfs
5+ *
6+ * time complexity: O(n^k)
7+ * space complexity: O(n)
8+ */
9+ var combinationSum = function ( candidates , target ) {
10+ const answer = [ ] ;
11+
12+ const dfs = ( array , sum , index ) => {
13+ if ( sum > target ) return ;
14+ if ( sum === target ) return answer . push ( array ) ;
15+
16+ for ( let i = index ; i < candidates . length ; i ++ ) {
17+ const nextArray = array . concat ( candidates [ i ] ) ;
18+ const nextSum = sum + candidates [ i ] ;
19+
20+ dfs ( nextArray , nextSum , i ) ;
21+ }
22+ } ;
23+
24+ candidates . forEach ( ( value , i ) => dfs ( [ value ] , value , i ) ) ;
25+
26+ return answer ;
27+ } ;
Original file line number Diff line number Diff line change 1+ /**
2+ * @description
3+ * brainstorming:
4+ * recursive function
5+ *
6+ * time complexity: O(n)
7+ * space complexity: O(n)
8+ */
9+ var productExceptSelf = function ( nums ) {
10+ const answer = Array . from ( { length : nums . length } , ( ) => 0 ) ;
11+
12+ const search = ( left , right , i ) => {
13+ if ( i === nums . length - 1 ) {
14+ answer [ i ] = left * right ;
15+ return nums [ i ] ;
16+ }
17+
18+ const productLeft = left * nums [ i ] ;
19+ const productRight = search ( productLeft , right , i + 1 ) ;
20+
21+ answer [ i ] = left * productRight ;
22+
23+ return productRight * nums [ i ] ;
24+ } ;
25+
26+ search ( 1 , 1 , 0 ) ;
27+
28+ return answer ;
29+ } ;
Original file line number Diff line number Diff line change 1+ /**
2+ * @description
3+ * brainstorming:
4+ * 1. O(n^2) brute force
5+ * 2. hash table
6+ */
7+
8+ /**
9+ * @description brainstorming 1 solve
10+ * time complexity: O(n^2)
11+ * space complexity: O(1)
12+ */
13+ var twoSum = function ( nums , target ) {
14+ for ( let i = 0 ; i < nums . length ; i ++ ) {
15+ for ( let j = i + 1 ; j < nums . length ; j ++ ) {
16+ if ( nums [ i ] + nums [ j ] === target ) return [ i , j ] ;
17+ }
18+ }
19+ } ;
20+
21+ /**
22+ * @description brainstorming 2 solve
23+ * time complexity: O(n^2)
24+ * space complexity: O(n)
25+ */
26+ var twoSum = function ( nums , target ) {
27+ const map = new Map ( ) ;
28+
29+ nums . forEach ( ( num , index ) => {
30+ if ( ! map . get ( num ) ) return map . set ( num , [ index ] ) ;
31+
32+ map . set ( num , map . get ( num ) . concat ( index ) ) ;
33+ } ) ;
34+
35+ for ( let i = 0 ; i < nums . length ; i ++ ) {
36+ const rest = target - nums [ i ] ;
37+
38+ if ( ! map . get ( rest ) ) continue ;
39+
40+ const indexList = map . get ( rest ) ;
41+ for ( let j = 0 ; j < indexList . length ; j ++ ) {
42+ if ( i === indexList [ j ] ) continue ;
43+
44+ return [ i , indexList [ j ] ] ;
45+ }
46+ }
47+ } ;
You can’t perform that action at this time.
0 commit comments