查找两个子序列的最大和的程序,其中两个值的差与它们在Python中的位置差相同

假设我们有一个称为nums的数字列表,我们选择一个严格递增值的子序列,其中每个两个数字的差与两个索引的差相同。因此,我们必须找到这种子序列的最大和。

因此,如果输入类似于nums = [6、7、9、9、8、5],那么输出将为22,因为我们选择了索引为[0、1, 3]。每个连续数字之间的差异为[1,2],与它们的索引差异相同。

为了解决这个问题,我们将遵循以下步骤-

  • d:=一个空的映射

  • 对于每个索引i和以数值为单位的值x,执行

    • d [x − i]:= d [x − i] + x

  • 返回d中所有值的最大值

让我们看下面的实现以更好地理解-

示例

class Solution:
   def solve(self, nums):
      from collections import defaultdict
      d = defaultdict(int)
      for i, x in enumerate(nums):
         d[x − i] += x
      return max(d.values())

ob1 = Solution()nums = [6, 7, 9, 9, 8, 5]
print(ob1.solve(nums))

输入值

[6, 7, 9, 9, 8, 5]

输出结果

22
猜你喜欢