300.最长递增子序列
dp的含义是递增子序列的最后一个元素是nums【i],然后判断
func lengthOfLIS(nums []int) int {
dp := make([]int, len(nums))
for i := 0 ; i < len(dp); i++{
dp[i] = 1
}
dp[0] = 1
res := 1
for i := 1; i < len(dp); i++{
for j := 0; j < i; j++{
if nums[i] > nums[j]{
dp[i] = max(dp[j] + 1, dp[i])
}
}
if dp[i] > res{
res = dp[i]
}
}
return res
}
func max(a , b int)int{
if a < b{
return b
}
return a
}
674. 最长连续递增序列
这个就是判断这一串的长度,如果断了就下一个节点继续判断
func findLengthOfLCIS(nums []int) int {
res := 1
for i := 0; i < len(nums); i++{
lens := 1
for lens + i < len(nums) && nums[lens + i - 1] < nums[lens + i ]{
lens++
}
res = max(res, lens)
i = lens + i - 1
}
return res
}
func max(a ,b int)int{
if a < b{
return b
}
return a
}
718. 最长重复子数组
dp[i][j]是指i - 1和j - 1为为最后一个元素的最长公共长度。
func findLength(nums1 []int, nums2 []int) int {
dp := make([][]int, len(nums1) + 1)
for i := 0; i <= len(nums1); i++{
dp[i] = make([]int, len(nums2) + 1)
}
res := 0
for i := 1; i <=len(nums1); i++{
for j := 1; j <=len(nums2); j++{
if nums1[i - 1] == nums2[j - 1]{
dp[i][j] = dp[i - 1][j - 1] + 1
}
res = int(math.Max(float64(res), float64(dp[i][j])))
}
}
return res
}