在Python中寻找旋转后数组的最大加权和的程序
假设我们有一个数组,我们必须找到旋转数组元素的最大加权和。可以像下面这样计算数组元素的加权和nums −
\mathrm{𝑆=\sum_{\substack{𝑖=1}}^{n}𝑖∗𝑛𝑢𝑚𝑠[𝑖]}
因此,如果输入是L = [5,3,4],则输出将为26,因为
- 数组是[5,3,4],总和为5 + 23 + 34 = 5 + 6 + 12 = 23
-
数组是[3,4,5],总和为3 + 24 + 35 = 3 + 8 + 15 = 26(最大值)
-
数组是[4,5,3],总和为4 + 25 + 33 = 4 + 10 + 9 = 23
要解决这个问题,我们将执行以下步骤−
- n:nums的大小
- sum_a:nums中所有元素的和
- ans:对于范围0到n的所有i,所有元素(nums [i] *(i + 1))的总和
- cur_val:ans
- 对于i在范围0到n-1中,执行以下操作
- cur_val:cur_val – sum_a + nums [i] * n
- ans:ans和cur_val的最大值
- 返回ans
示例
让我们看下面的实现,以获得更好的理解−
def solve(nums):
n = len(nums)
sum_a = sum(nums)
cur_val = ans = sum(nums[i] * (i + 1) for i in range(n))
for i in range(n):
cur_val = cur_val - sum_a + nums[i] * n
ans = max(ans, cur_val)
return ans
nums = [5,3,4]
print(solve(nums))
输入
[5,3,4]
输出
26