Leetcode 1096 Solution

This article provides solution to leetcode question 1096 (maximum-sum-of-two-non-overlapping-subarrays)

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

Solution

class Solution:
    def _maxSumTwoNoOverlap(self, A: List[int], L: int, M: int) -> int:
        n = len(A)

        opt1 = [0] * n
        opt2 = [0] * n

        cur = sum(A[0:L])
        opt1[L - 1] = cur
        for i in range(L, n):
            cur += A[i] - A[i - L]
            opt1[i] = max(opt1[i - 1], cur)

        cur = sum(A[n - M:n])
        opt2[n - M] = cur
        for i in reversed(range(0, n - M)):
            cur += A[i] - A[i + M]
            opt2[i] = max(opt2[i + 1], cur)

        ans = 0
        for i in range(L - 1, n - M):
            ans = max(ans, opt1[i] + opt2[i + 1])
        return ans

    def maxSumTwoNoOverlap(self, A: List[int], L: int, M: int) -> int:
        return max(
            self._maxSumTwoNoOverlap(A, L, M),
            self._maxSumTwoNoOverlap(A, M, L),
        )