115. Leetcode 718. 最长重复子数组 (动态规划-子序列问题)
生活随笔
收集整理的這篇文章主要介紹了
115. Leetcode 718. 最长重复子数组 (动态规划-子序列问题)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
步驟一、確定狀態(tài):
確定dp數(shù)組及下標(biāo)含義
dp[i][j]表示的是長度為i的A數(shù)組和長度為j的B數(shù)組公共的長度最長的子數(shù)組的長 度。
步驟二、推斷狀態(tài)方程:
考慮下dp[i][j], 因為這里的子數(shù)組必須是連續(xù)的,所以只需要 考慮前面的一個狀態(tài)即可,也就是由dp[i-1][j-1]推導(dǎo)出來的
如果當(dāng)前的兩個元素相同, 即A[i]==B[j], 則說明當(dāng)前元素可 以構(gòu)成公共子數(shù)組,那么當(dāng)前倆數(shù)組組成的最長的公共連續(xù)子 數(shù)組長度就是dp[i-1][j-1]+1,也就是在之前的基礎(chǔ)上加上最后 1位新的。
如果當(dāng)前的兩個元素不相同, 即A[i]!=B[j], 這說明當(dāng)前的元 素?zé)o法構(gòu)成公共子數(shù)組,因為公共子數(shù)組是連續(xù)的,而當(dāng)前這 倆哥們不相等,那么此時d[i][j]=0,要從0開始重新算了。
步驟三、規(guī)定初始條件:
初始條件:
全局初始化的時候都初始化為0
步驟四、計算順序: 外層遍歷A數(shù)組,內(nèi)層遍歷B數(shù)組
class Solution:def findLength(self, nums1: List[int], nums2: List[int]) -> int:if not nums1 or not nums2:return 0dp = [[0 for _ in range(len(nums2) + 1)] for _ in range(len(nums1) + 1)]result = 0for i in range(1, len(nums1) + 1):for j in range(1, len(nums2) + 1):if nums1[i-1] == nums2[j-1]:dp[i][j] = dp[i-1][j-1] + 1result = max(result, dp[i][j])return result?
總結(jié)
以上是生活随笔為你收集整理的115. Leetcode 718. 最长重复子数组 (动态规划-子序列问题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 114. Leetcode 53. 最大
- 下一篇: 116. Leetcode 1143.