使用滑动窗口
什么是滑动窗口?
顾名思义,首先是一个窗口,既然是一个窗口,就需要用窗口的左边界i和右边界j来唯一表示一个窗口,其次,滑动代表,窗口始终从左往右移动,这也表明左边界i和右边界j始终会往后移动,而不会往左移动。
这里我用左闭右开区间来表示一个窗口。比如
滑动窗口的操作
扩大窗口,j += 1
缩小窗口,i += 1
算法步骤:
初始化,i=1,j=2, 表示初始窗口
如果窗口中值的和小于目标值sum, 表示需要扩大窗口,j += 1
否则,如果窗口值和大于目标值sum,表示需要缩小窗口,i += 1
否则,等于目标值,存结果,缩小窗口,继续进行步骤2,3,4
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
result = []
left = 1
right = 2
if tsum < 3:
return result
while left < right:
sum_ = sum(range(left,right+1))
if sum_ == tsum:
result.append(range(left,right+1))
right += 1
elif sum_ < tsum:
right += 1
else:
left += 1
return result