1
+ /**
2
+ * @param {number[] } nums
3
+ * @return {number }
4
+ */
5
+ var lengthOfLIS = function ( nums ) {
6
+ let dp = new Array ( nums . length ) . fill ( 0 ) ;
7
+ dp [ 0 ] = 1 ;
8
+ let result = 1 ;
9
+ if ( nums . length == 0 ) {
10
+ return 0
11
+ }
12
+ // in dp contains all subsequence length;
13
+ // [10,9,2,5,3,7,101,18]
14
+ // [1,0,0,0,0,0,0,0] // step 1
15
+ // [1,1,0,0,0,0,0,0] // step 2. 9 < 10 so numbers are not growing.
16
+ // [1,1,1,0,0,0,0,0] // step 3. 2 < 10 || 9 so numbers are not growing.
17
+ // [1,1,1,2,0,0,0,0] // step 4. 5 > 2 -> dp[indexOf(2) == 2] == 1; dp[i] = 1 + 1(beucase 1 more element in sequense)
18
+ // [1,1,1,2,2,0,0,0] // step 5. 3 > 2 -> dp[indexOf(2) == 2] == 1; dp[i] = 1 + 1
19
+ // [1,1,1,2,2,3,0,0] // step 6. 7 > 3 -> dp[indexOf(3) == 4] == 2; dp[i] = 2 + 1;
20
+ // [1,1,1,2,2,3,4,0] // step 7. 101 > 7 -> dp[indexOf(7) == 5] == 3; dp[i] = 3 + 1;
21
+ // [1,1,1,2,2,3,4,4] // step 8. 10 > 7 -> dp[indexOf(7) == 5] == 3; dp[i] = 3+1;
22
+ // If we have array like [10,9,2,5,3,7,101,102]; then
23
+ // [1,1,1,2,2,3,4,4,5] // step 9 102 > 101; dp[indexOf(101) == 6] == 4; dp[i] = 4 +1;
24
+ for ( let i = 1 ; i < nums . length ; i ++ ) {
25
+ let max_length = 0
26
+ for ( let j = 0 ; j < i ; j ++ ) {
27
+ if ( nums [ i ] > nums [ j ] ) {
28
+ max_length = Math . max ( max_length , dp [ j ] )
29
+ }
30
+ }
31
+ dp [ i ] = max_length + 1 ;
32
+ result = Math . max ( dp [ i ] , result ) ;
33
+ }
34
+ return result
35
+ } ;
0 commit comments