Skip to content

Latest commit

 

History

History
29 lines (25 loc) · 937 Bytes

1031.md

File metadata and controls

29 lines (25 loc) · 937 Bytes

1031. Maximum Sum of Two Non-Overlapping Subarrays

Solution 1 (time O(n), space O(n))

class Solution(object):
    def maxSumTwoNoOverlap(self, nums, firstLen, secondLen):
        """
        :type nums: List[int]
        :type firstLen: int
        :type secondLen: int
        :rtype: int
        """
        n = len(nums)
        prefix_sum = [0] * (n + 1)
        for i in range(n):
            prefix_sum[i + 1] = prefix_sum[i] + nums[i]
        self.ans = 0

        def solve(firstLen, secondLen):
            max_sum_1 = 0
            for i in range(firstLen + secondLen, n + 1):
                max_sum_1 = max(max_sum_1, prefix_sum[i - secondLen] - prefix_sum[i - secondLen - firstLen])
                self.ans = max(self.ans, max_sum_1 + prefix_sum[i] - prefix_sum[i - secondLen])

        solve(firstLen, secondLen)
        solve(secondLen, firstLen)
        return self.ans