📌  相关文章
📜  将前缀和后缀乘以-1后,最大化数组的总和(1)

📅  最后修改于: 2023-12-03 14:53:48.200000             🧑  作者: Mango

将前缀和后缀乘以-1后,最大化数组的总和

该题的思路是通过将前缀和后缀乘以-1来改变数组中的元素值,从而使最终的数组总和最大化。具体实现方法是通过动态规划来求解。

代码实现
def getMaxSum(nums):
    n = len(nums)
    preSums = [0]*(n+1)
    sufSums = [0]*(n+1)
    for i in range(1, n+1):
        preSums[i] = preSums[i-1] + nums[i-1]
    for i in range(n-1, -1, -1):
        sufSums[i] = sufSums[i+1] + nums[i]

    ans = preSums[n]
    maxSufSum = [0]*(n+1)
    for i in range(n-1, -1, -1):
        maxSufSum[i] = max(maxSufSum[i+1], sufSums[i+1])
    for i in range(n):
        ans = max(ans, preSums[i] - nums[i] + maxSufSum[i+1])
    return ans*(-1)
代码解析
  1. 先计算出前缀和preSums和后缀和sufSums。

  2. 然后从数组的末尾开始,计算出后缀和的最大值并存放到maxSufSum中。

  3. 然后再次遍历数组,计算preSums[i] - nums[i] + maxSufSum[i+1]的最大值即可得到最终结果。

  4. 最后将结果乘以-1即为所求。

时间复杂度

时间复杂度为O(n)。

空间复杂度

空间复杂度为O(n)。

参考资料