leetcode-190周赛-1458-两个子序列的最大点积

题目描述:

 

 

 

 提交:

class Solution:
    def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int:
        n1,n2 = len(nums1),len(nums2)
        dp = [[0] * n2  for _ in range(n1)]
        for i in range(n1):
            for j in range(n2):
                if i == 0 or j == 0:
                    dp[i][j] = nums1[i] * nums2[j]
                    if j != 0:
                        dp[i][j] = max(dp[i][j],dp[i][j-1])
                else:
                    dp[i][j] = max(dp[i-1][j-1] + nums1[i] * nums2[j],dp[i][j-1],dp[i-1][j])
        return dp[-1][-1]

另:

class Solution:
    def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int:
        a, b = nums1, nums2
        if max(a)<0<min(b): return max(a)*min(b)
        if max(b)<0<min(a): return max(b)*min(a)
        n, m = len(a), len(b)
        f = [[0]*(m+1) for _ in range(n+1)]
        for i in range(n):
            for j in range(m):
                f[i+1][j+1] = max(f[i][j+1], f[i+1][j], f[i][j]+a[i]*b[j])
        return f[n][m]

 

posted @ 2020-05-25 10:54  oldby  阅读(199)  评论(0编辑  收藏  举报