📅  最后修改于: 2023-12-03 14:53:48.200000             🧑  作者: Mango
该题的思路是通过将前缀和后缀乘以-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)
先计算出前缀和preSums和后缀和sufSums。
然后从数组的末尾开始,计算出后缀和的最大值并存放到maxSufSum中。
然后再次遍历数组,计算preSums[i] - nums[i] + maxSufSum[i+1]的最大值即可得到最终结果。
最后将结果乘以-1即为所求。
时间复杂度为O(n)。
空间复杂度为O(n)。