-
Notifications
You must be signed in to change notification settings - Fork 1
/
300.ts
66 lines (63 loc) · 1.43 KB
/
300.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*
* @lc app=leetcode.cn id=300 lang=typescript
*
* [300] 最长递增子序列
*/
// @lc code=start
/**
* 迭代写法
*/
// function lengthOfLIS(nums: number[]): number {
// let dp = new Array(nums.length).fill(1)
// // 0...j ... i
// function findLowerThanI(i) {
// for (let j = 0; j < i; j++) {
// if (nums[j] < nums[i]) {
// dp[i] = Math.max(dp[i], dp[j] + 1)
// }
// }
// }
// for (let i = 1; i < nums.length; i++) {
// /**
// * 状态转移
// */
// // dp[i] = length(i-1)
// findLowerThanI(i)
// }
// // for (let i = 0; i < nums.length; i++) {
// // res = Math.max(res, dp[i])
// // }
// // return res
// // return dp[dp.length - 1]
// return Math.max(...dp)
// };
/**
* 递归写法, 但还是迭代的思想
*/
function lengthOfLIS(nums: number[]): number {
let max = 1
let dpTable = [1]
/**
* 以 idx= i 结尾的字符串的, 最长子字符串
*/
function dp(i: number) {
if(dpTable[i]) return dpTable[i]
let max_2 = 1
for (let j = 0; j < i; j++) {
if (nums[j] < nums[i]) {
max_2 = Math.max(dp(j) + 1, max_2)
}
}
dpTable[i] = max_2
return max_2
}
// return dp(nums.length - 1)
for (let i = 1; i < nums.length; i++) {
const d = dp(i)
max = Math.max(d, max)
}
return max
}
// @lc code=end
console.log(lengthOfLIS([1, 3, 6, 7, 9, 4, 10, 5, 6]))
// console.log(lengthOfLIS([1, 4, 3, 4, 2, 3]))