在Python中寻找旋转后数组的最大加权和的程序

在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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程