给你一个整数数组 nums 和一个整数 k ,找出三个长度为 k 、互不重叠、且 3 * k 项的和最大的子数组,并返回这三个子数组。
以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置(下标从 0 开始)。如果有多个结果,返回字典序最小的一个。
示例 1:
输入:nums = [1,2,1,2,6,7,5,1], k = 2
输出:[0,3,5]
解释:子数组 [1, 2], [2, 6], [7, 5] 对应的起始下标为 [0, 3, 5]。
也可以取 [2, 1], 但是结果 [1, 3, 5] 在字典序上更大。
示例 2:
输入:nums = [1,2,1,2,1,2,1,2,1], k = 2
输出:[0,2,4]
提示:
class Solution:
def maxSumOfThreeSubarrays(self, nums: List[int], k: int) -> List[int]:
#定义三个滑动窗口
sum1,maxsum1,maxsum1indx=0,0,0
sum2,maxsum12,maxsum12indx=0,0,()
sum3,maxtoral=0,0
#遍历数组
for i in range(2*k,len(nums)):
sum1+=nums[i-2*k]
sum2+=nums[i-k]
sum3+= nums[i]
#当滑动窗口内的数字达到k个,记录最大和坐标之后减去每个数组中的第一个元素
if i>=3*k-1:
if sum1>maxsum1:
maxsum1=sum1
maxsum1indx=i-3*k+1
if maxsum1+sum2>maxsum12:
maxsum12=maxsum1+sum2
maxsum12indx=(maxsum1indx,i-2*k+1)
if sum3+maxsum12>maxtotal:
maxtotal=sum3+maxsum12
ans=[*maxsum12indx,i-k+1]
sum1-=nums[i-3*k+1]
sum2-=nums[i-2*k+1]
sum3-=nums[i-k+1]
return ans
python中 *[ ] 的用法
与zip的用法相反,zip是将一个或者多个可迭代元素中的元素进行包装压缩返回一个列表
*[]则是对可迭代元素对象(如列表,字典,元组这一类对象)的解压, 有numpy中生成的向量也可以拆分
例
a=[1,2,3]
print(a)
print(*a)
------------------------------------------------------------
[1,2,3]
1
2
3