300. 最长递增子序列
题目描述:
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
考察重点:动态规划。根据题意可以写出转移方程:dp[i] = Max(d[i], dp[j] +1) 且j满足 nums[j] < nums[i] 和 j < i
func lengthOfLIS(nums []int) int {dp := make([]int, len(nums))maxLIS := 0for i := 0;i < len(nums);i ++{ //dp数组记录当前位置可以组成的最长子序列dp[i] = 1}for i := 0;i < len(nums);i ++{ // 由前至后遍历数组,更新dp数组for j := 0;j < i;j ++{if nums[j] < nums[i] && dp[j] + 1 > dp[i]{dp[i] = dp[j] + 1}} if dp[i] > maxLIS{ // 记录最大字符列长度maxLIS = dp[i]}}return maxLIS
}