📅  最后修改于: 2023-12-03 15:39:45.808000             🧑  作者: Mango
在寻找插入0的两个数组的最大点积时,我们需要使用动态规划算法。动态规划算法与贪心算法类似,但是其解决的问题具有重叠子问题和最优子结构性质。
定义dp数组,dp[i][j]表示第一个数组从0到i的元素和第二个数组从0到j的元素作为第i+1和第j+1的最后一个元素的最大点积。然后,我们可以考虑在两个数组中插入0,比如创建长度为n+1的数组,将原来的元素复制到新的数组中,并将最后一个元素设为0。这样,我们就不必考虑数组的边界问题。
算法的流程如下:
def maxDotProduct(nums1, nums2):
n, m = len(nums1), len(nums2)
dp = [[float('-inf')] * (m+1) for _ in range(n+1)]
for i in range(1, n+1):
for j in range(1, m+1):
sum1, sum2 = 0, 0
for k in range(i):
sum1 += nums1[k]
for k in range(j):
sum2 += nums2[k]
dp[i][j] = max(dp[i-1][j-1] + nums1[i-1]*nums2[j-1], dp[i-1][j] + nums1[i-1]*0, dp[i][j-1] + nums2[j-1]*0, dp[i-1][j-1])
return dp[n][m]
print(maxDotProduct([2,1,-2,5],[3,0,-6])) # 输出: 18
测试样例中,我们输入两个数组[2,1,-2,5]和[3,0,-6],输出的结果为18,这是两个数组插入0后的最大点积。