用 Python 编写程序,从所有可能的有效路径中找出最高分
假设我们有两个数组 nums1 和 nums2。有效路径定义如下 −
选择要遍历的 nums1 或 nums2(从索引 0 开始)。
从左到右遍历数组。
现在,如果我们要遍历 nums1 和 nums2 中存在的任何值,我们可以将路径更改为另一个数组。这里的分数是有效路径中唯一值的总和。我们必须找到所有可能的有效路径中可以获得的最高分数。如果答案太大,则返回模 10^9+7 的结果。
因此,如果输入为 nums1 = [3,5,6,9,11] nums2 = [5,7,9,10],则输出将为 35,因为 −
从 nums1 开始的有效路径为:[3,5,6,9,11], [3,5,6,9,10], [3,5,7,9,10], [3,5,7,9,11]
从 nums2 开始的有效路径为:[5,7,9,10], [5,6,9,11], [5,6,9,10], [5,7,9,11]

所以最大值是 [3,5,7,9,11]。
为了解决这个问题,我们将遵循以下步骤 −
M := nums1 的大小,N := nums2 的大小
sum1 := 0,sum2 := 0
i := 0,j := 0
res := 0
while i < M and j < N,执行
如果 nums1[i] < nums2[j],则
sum1 := sum1 + nums1[i]
i := i + 1
否则当 nums1[i] > nums2[j],则
sum2 := sum2 + nums2[j]
j := j + 1
否则,
res := res + sum1 的最大值,(sum2 + nums1[i])
i := i + 1
j := j + 1
sum1 := 0
sum2 := 0
while i < M ,执行
sum1 := sum1 + nums1[i]
i := i + 1
while j < N ,执行
sum2 := sum2 + nums2[j]
j := j + 1
return(res + sum1、sum2 的最大值) mod 10^9+7
示例
让我们看看下面的实现以便更好地理解
def solve(nums1, nums2):
M, N = len(nums1), len(nums2)
sum1, sum2 = 0, 0
i, j = 0, 0
res = 0
while i < M and j < N:
if nums1[i] < nums2[j]:
sum1 += nums1[i]
i += 1
elif nums1[i] > nums2[j]:
sum2 += nums2[j]
j += 1
else:
res += max(sum1, sum2) + nums1[i]
i += 1
j += 1
sum1 = 0
sum2 = 0
while i < M:
sum1 += nums1[i]
i += 1
while j < N:
sum2 += nums2[j]
j += 1
return (res + max(sum1, sum2)) % 1000000007
nums1 = [3,5,6,9,11]
nums2 = [5,7,9,10]
print(solve(nums1, nums2))
输入
[3,5,6,9,11], [5,7,9,10]
输出
35
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

