R3-滑动窗口专题(没滑其实)
思路:
1.使用二维数组(初始化为0)记录相等的值为1
2.查找左上角是否为1,为1就增加1
3.返回表中最大值即可
class Solution:
def findLength(self, nums1: List[int], nums2: List[int]) -> int:
m,n=len(nums1),len(nums2)
ret=0
dp=[[0]*n for _ in range(m)]
for i in range(m):
for j in range(n):
if nums1[i]==nums2[j]:
if i>0 and j>0:
dp[i][j]=dp[i-1][j-1]+1
else:
dp[i][j]=1
return max(max(row) for row in dp)
假装优化?:
在每次循环中都重置一次最大值
class Solution:
def findLength(self, nums1: List[int], nums2: List[int]) -> int:
m,n=len(nums1),len(nums2)
ret=0
max_len=0
dp=[[0]*n for _ in range(m)]
for i in range(m):
for j in range(n):
if nums1[i]==nums2[j]:
if i>0 and j>0:
dp[i][j]=dp[i-1][j-1]+1
else:
dp[i][j]=1
max_len=max(max_len,dp[i][j])
return max_len
效果没有第一个好,可能是python 内置算法比较快??
ps:
本题中dp不是动态规划,只是一张二维数组
查找二维数组中的最大值
max(max(row) for row in dp)