通过重新排列元素以Python中的程序获得列表的最大值

通过重新排列元素以Python中的程序获得列表的最大值

假设我们有一个包含N个正数的列表nums。现在我们可以从列表中选择任何一个值,并将其移动(而不是交换)到任何位置。我们也可以完全不将任何值移动到位置。所以我们必须找出列表的最大可能最终功率是多少?正如我们所知,列表的功率是所有指数i上的(index+1)*value_at_index总和。

\displaystyle\sum\limits_{i=0}^{n-1} (i+1)\times list[i]

因此,如果输入是nums=[6,2,3],那么输出将是26,因为我们可以将6移动到最后以获取列表[2,3,6],因此功率为:(21)+(32)+(6*3)= 26。

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

  • P:值为0的列表

  • 基数:= 0

  • 对于A中的每个索引i和值x,执行以下操作

    • 将P的最后一个元素+x插入P的末尾

    • base:= base + (i+1) * x

  • 答案:=基数

  • 对于A中的每个索引i和值x,执行以下操作

    • 对于范围为0到A的大小+1的j,执行以下操作
      • 答案:=ans和(base + P[i] – P[j] – (i-j)*x)的最大值
  • 返回ans

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

示例

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

class Solution:
   def solve(self, A):
      P = [0]
      base = 0
      for i, x in enumerate(A, 1):
         P.append(P[-1] + x)
         base += i * x
      ans = base
      for i, x in enumerate(A):
         for j in range(len(A) + 1):
            ans = max(ans, base + P[i] - P[j] - (i - j) * x)
      return ans
ob = Solution()
nums = [6, 2, 3]
print(ob.solve(nums))

输入

[6, 2, 3]

输出

26

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程