我来补卡8号的每日一题
class Solution:
def maxSumOfThreeSubarrays(self, nums: List[int], k: int) -> List[int]:
ans = []
sum1, maxSum1, maxSum1Idx = 0, 0, 0
sum2, maxSum2, maxSum2Idx = 0, 0, ()
sum3, maxTotal = 0, 0
# 迭代从2k保证三个滑动窗口没有交叉
for i in range(k * 2, len(nums)):
sum1 += nums[i - k * 2]
sum2 += nums[i - k]
sum3 += nums[i]
if i >= k * 3 - 1:
# 三个窗口分别记录最大值以及最大值时滑动窗口开始位置的索引
if sum1 > maxSum1:
maxSum1 = sum1
maxSum1Idx = i - k * 3 + 1
if maxSum1 + sum2 > maxSum2:
maxSum2 = maxSum1 + sum2
maxSum2Idx = (maxSum1Idx, i - k * 2 + 1)
if maxSum2 + sum3 > maxTotal:
maxTotal = maxSum2 + sum3
ans = [*maxSum2Idx, i - k + 1]
# 随着窗口的滑动,后面新的数字进来,那么前面的数字需要剔除掉
sum1 -= nums[i - k * 3 + 1]
sum2 -= nums[i - k * 2 + 1]
sum3 -= nums[i - k + 1]
return ans
优化滑动窗口算法:求三子数组最大和
此篇博客介绍如何使用Python实现一个Solution类,解决给定整数数组中,找到三个连续子数组之和最大的问题,通过维护三个滑动窗口并更新最大和。
269

被折叠的 条评论
为什么被折叠?



