forked from SamirPaulb/DSAlgo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path07. Maximum Sum of Two Non-Overlapping Subarrays.py
41 lines (35 loc) Β· 1.23 KB
/
07. Maximum Sum of Two Non-Overlapping Subarrays.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# https://leetcode.com/problems/maximum-sum-of-two-non-overlapping-subarrays/
class Solution:
def maxSumTwoNoOverlap(self, nums: List[int], firstLen: int, secondLen: int) -> int:
n = len(nums)
prefixArr = []
s = 0
for i in nums:
s += i
prefixArr.append(s)
def left(k):
arr = [0] * n
curmax = 0
for i in range(k-1, n):
cur = prefixArr[i] - prefixArr[i-k+1] + nums[i-k+1]
curmax = max(curmax, cur)
arr[i] = curmax
return arr
def right(k):
arr = [0] * n
curmax = 0
for i in range(n-k, -1, -1):
cur = prefixArr[i+k-1] - prefixArr[i] + nums[i]
curmax = max(curmax, cur)
arr[i] = curmax
return arr
first_left = left(firstLen)
first_right = right(firstLen)
second_left = left(secondLen)
second_right = right(secondLen)
res = 0
for i in range(1, n):
a = first_left[i-1] + second_right[i]
b = second_left[i-1] + first_right[i]
res = max(res, a, b)
return res