689 Maximum Sum of 3 Non-Overlapping Subarrays

https://leetcode.com/problems/maximum-sum-of-3-non-overlapping-subarrays/

def maxSum(nums, k):
    n = len(nums)
    maxval = 0
    sums = []
    res = [0, 0, 0]
    for i in range(len(nums)):
        if i == 0:
            sums.append(nums[i])
        else:
            sums.append(sums[-1] + nums[i])
    left = [0] * n
    right = [n - k] * n
    total = sums[k - 1]
    for i in range(k, n):
        if sums[i] - sums[i - k] > total:
            left[i] = i - k + 1
            total = sums[i] - sums[i - k]
        else:
            left[i] = left[i - 1]
    total = sums[n - 1] - sums[n - k - 1]
    for j in range(n - k - 1, -1, -1):
        if sums[j + k - 1] - sums[j - 1] >= total:
            right[j] = j
            total = sums[j + k - 1] - sums[j - 1]
        else:
            right[j] = j + 1

    for i in range(k, n - 2 * k + 1):
        l, r = left[i - 1], right[i + k]
        leftsum = sums[l + k - 1] - sums[l - 1] if l > 0 else 0
        midsum = sums[i + k - 1] - sums[i - 1]
        rightsum = sums[r + k - 1] - sums[r - 1]
        total = leftsum + midsum + rightsum
        if maxval < total:
            maxval = max(maxval, total)
            res = [l, i, r]
    return res

你可能感兴趣的:(689 Maximum Sum of 3 Non-Overlapping Subarrays)