在Python中找到一个(i, j)对,使得nums[i] + nums[j] + (i – j)最大?

在Python中找到一个(i, j)对,使得nums[i] + nums[j] + (i – j)最大?

假设我们有一个叫做nums的数字列表,我们必须找到一个(i, j)对,其中i < j,并且nums[i] + nums[j] + (i – j)最大。

因此,如果输入是nums = [6, 6, 2, 2, 2, 8],则输出将是11,因为如果我们选择两个6,则其分数为6 + 6 + 0 – 1 = 11。

为了解决这个问题,我们将按照以下步骤进行:

  • large := nums[0]

  • maxi := 0

  • for i in range(1 to size of nums), do

    • large := large – 1

    • maxi := large + nums[i]和maxi中的最大值

    • large := large和nums[i]中的最大值

  • 返回maxi

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

更多Python相关文章,请阅读:Python 教程

示例

class Solution:
   def solve(self, nums):
      large = nums[0]

      maxi = 0
      for i in range(1, len(nums)):
         large -= 1
         maxi = max(large + nums[i], maxi)
         large = max(large, nums[i])

      return maxi

ob = Solution()
nums = [6, 6, 2, 2, 2, 8]
print(ob.solve(nums))

输入

[6, 6, 2, 2, 2, 8]

输出

11

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程