在Python中找到列表的最大最终功率的程序
假设我们有一个列表,列表的功率定义为所有索引上的(索引+1)* value_at_index的总和。或者我们可以这样表示-
现在,我们有一个包含N个正整数的列表nums。我们可以选择列表中的任何单个值,并将其(不要交换)移动到任何位置,可以将其移动到列表的开头或结尾。我们也可以选择不移动任何位置。我们必须找到列表可能的最大最终功率。结果必须被模数为10 ^ 9 + 7。
因此,如果输入是nums = [4,2,1],则输出将是16。
要解决此问题,我们将遵循以下步骤-
- P:= [0]
-
基数:= 0
-
对于索引i和项x中的每个i,x在A中,执行以下操作1-
- 在P的末尾插入P[-1] + x
-
基数:=基数+ i * x
- 在P的末尾插入P[-1] + x
-
定义一个函数eval_at()。这将采用j,x
- 返回-j * x + P [j]
- 定义一个函数intersection()。这将采用j1,j2
- return(P[j2] – P[j1]) /(j2-j1)
- hull:= [-1]
-
索引:= [0]
-
对于P的范围内的每个j,执行以下操作1
- 同时hull和intersection(indexes [-1],j)<= hull [-1]时
- 从hull中删除最后一个元素
-
从索引中删除最后一个元素
- 从hull中删除最后一个元素
-
在hull的末尾插入intersection(indexes [-1],j)
-
在indexes的末尾插入j
- 同时hull和intersection(indexes [-1],j)<= hull [-1]时
-
ans:=基数
-
对于在A中的索引i和项x,执行以下操作-
- j:= x可以插入的部分hull,保持排序顺序
-
j:= j-1的最大值,0
-
ans:= ans,base + eval_at(i,x)-eval_at(indexes [j],x)的最大值
-
返回ans mod(10 ** 9 + 7)
更多Python相关文章,请阅读:Python 教程
示例
让我们看一下以下实现,以更好地理解-