在 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
-
当 i
- 如果 nums1 [i]
- 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
- 如果 nums1 [i]
-
当i
- sum1:= sum1 + nums1 [i]
-
i:= i + 1
-
当j
- sum2:= sum2 + nums2 [j]
-
j:= j + 1
-
返回(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