本文主要是介绍代码随想录算法训练营四十二天|300.最长递增子序列、674.最长连续递增则序列、718.最长重复子数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:300. 最长递增子序列 - 力扣(LeetCode)
思路:如果nums[i] > nums[j] 那么dp[i] 要么是dp[i] 要么是dp[j] + 1
class Solution(object):def lengthOfLIS(self, nums):""":type nums: List[int]:rtype: int"""dp = [1] * len(nums)for i in range(1, len(nums)):for j in range(i):if nums[i] > nums[j]:dp[i] = max(dp[i], dp[j] + 1)return max(dp)
题目链接:674. 最长连续递增序列 - 力扣(LeetCode)
class Solution(object):def findLengthOfLCIS(self, nums):""":type nums: List[int]:rtype: int"""dp = [1] * len(nums)for i in range(1, len(nums)):if nums[i] > nums[i - 1]:dp[i] = max(dp[i], dp[i - 1] + 1)return max(dp)
题目链接:718. 最长重复子数组 - 力扣(LeetCode)
思路:需要注意下标, 二维dp因为i-1 j-1 的原因所以行和列都会多一行。而nums1 nums2 都是0 到len(nums) -1
class Solution(object):def findLength(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int]:rtype: int"""dp = [[0] * (len(nums1) + 1) for _ in range(len(nums2) + 1)]result = -1for i in range(1, len(nums2) + 1):for j in range(1, len(nums1) + 1):if nums1[j - 1] == nums2[i - 1]:dp[i][j] = dp[i-1][j-1] + 1if dp[i][j] > result:result = dp[i][j]return result
这篇关于代码随想录算法训练营四十二天|300.最长递增子序列、674.最长连续递增则序列、718.最长重复子数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!