在 Python 中查找所有可能有效路径中的最大分数的程序

在 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]

在 Python 中查找所有可能有效路径中的最大分数的程序

因此,最大值是[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

  • 当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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程