3道题目
300. 最长递增子序列
674. 最长连续递增序列
718. 最长重复子数组
解题理解
300
dp[i]被设置为以nums[i]为结尾的最长递增子序列长度。
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
if len(nums) == 1:
return 1
n = len(nums)
dp = [1] * n
res = 0
for 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
思路跟上题一致,甚至还更简单,因为只需要看前一个位置和当前位置的关系就好。文章来源:https://www.toymoban.com/news/detail-725004.html
class Solution:
def findLengthOfLCIS(self, nums: List[int]) -> int:
if len(nums) == 1:
return 1
n = len(nums)
dp = [1] * n
res = 0
for 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 res
718
这道题相当于两道第一题重叠考虑,设置dp[i][j]为以i-1为结尾的A,和以j-1为结尾的B的最长重复子数组的长度。文章来源地址https://www.toymoban.com/news/detail-725004.html
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 = 0
for 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] + 1
if res < dp[i][j]:
res = dp[i][j]
return res
到了这里,关于Day 47 动态规划 part13的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!