深圳整站优化,凡客诚品官网网址,个人网站数据库怎么做,新建免费网站Day 47 动态规划 part13 解题理解300674718 3道题目 300. 最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
解题理解
300
dp[i]被设置为以nums[i]为结尾的最长递增子序列长度。
class Solution:def lengthOfLIS(self, nums: List[int]) - int:if len(nums) … Day 47 动态规划 part13 解题理解300674718 3道题目 300. 最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
解题理解
300
dp[i]被设置为以nums[i]为结尾的最长递增子序列长度。
class Solution:def lengthOfLIS(self, nums: List[int]) - int:if len(nums) 1:return 1n len(nums)dp [1] * nres 0for i in range(1, n):for j in range(i):if nums[i] nums[j]:dp[i] max(dp[i], dp[j] 1)if dp[i] res:res dp[i]return res 674
思路跟上题一致甚至还更简单因为只需要看前一个位置和当前位置的关系就好。
class Solution:def findLengthOfLCIS(self, nums: List[int]) - int:if len(nums) 1:return 1n len(nums)dp [1] * nres 0for i in range(1, n):if nums[i] nums[i - 1]:dp[i] max(dp[i], dp[i - 1] 1)if res dp[i]:res dp[i]return res718
这道题相当于两道第一题重叠考虑设置dp[i][j]为以i-1为结尾的A和以j-1为结尾的B的最长重复子数组的长度。
class Solution:def findLength(self, nums1: List[int], nums2: List[int]) - int:m len(nums1)n len(nums2)dp [[0] * (n 1) for _ in range(m 1)]res 0for i in range(1, m 1):for j in range(1, n 1):if nums1[i - 1] nums2[j - 1]:dp[i][j] dp[i - 1][j - 1] 1if res dp[i][j]:res dp[i][j]return res