通过重新排列元素以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)的最大值
- 对于范围为0到A的大小+1的j,执行以下操作
- 返回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