给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
func lengthOfLIS(nums []int) int {
size := len(nums)
if size == 0 {
return 0
}
dp := make([]int, size)
// 初始底, 1个元素
dp[0] = 1
// 转移方程: if nums[i] > nums[j] => dp[i] = max dp[0, i - 1] + 1
// else dp[i] = 0
for i := 1; i < size; i++ {
dp[i] = 0
for j := 0; j < i; j++ {
if (nums[i] > nums[j]) {
if dp[i] < dp[j] {
dp[i] = dp[j]
}
}
}
dp[i]++
}
// 获取最大的长度max(dp)
max := dp[0]
for i := range(dp) {
if dp[i] > max {
max = dp[i]
}
}
return dp[size - 1]
}
1518

被折叠的 条评论
为什么被折叠?



