1class Solution:
2 def maxSumOfThreeSubarrays(self, nums, k):
3 ksum = [sum(x) for i, x in enumerate(zip(*[nums[i:] for i in range(k)]))]
4 b1, b2, b3 = 0, [0, k], [0, k, k * 2]
5 b2_sum = ksum[0] + ksum[k]
6 b3_sum = ksum[0] + ksum[k] + ksum[k * 2]
7 indices = lambda i, k: (i + 1, i + k + 1, i + k * 2 + 1)
8 i1, i2, i3 = indices(0, k)
9 while i3 <= len(nums) - k:
10 b1 = max(b1, i1, key=ksum.__getitem__)
11 if ksum[i2] + ksum[b1] > b2_sum:
12 b2 = [b1, i2]
13 b2_sum = ksum[i2] + ksum[b1]
14 if ksum[i3] + b2_sum > b3_sum:
15 b3 = b2 + [i3]
16 b3_sum = ksum[i3] + b2_sum
17 i1, i2, i3 = indices(i1, k)
18 return b3
19
20f = Solution().maxSumOfThreeSubarrays
21print(
22 f([1, 2, 1, 2, 6, 7, 5, 1, 3, 4, 5, 6, 8, 7, 5, 4, 3, 2, 2, 3, 4, 6, 3, 2, 1], 3,)
23)