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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容