题解
思路
代码
class Solution:
### 1207 滑动窗口(124 ms,13.5 MB)
def findContinuousSequence(self, target: int) -> List[List[int]]:
# 初始化滑窗左l、右r从下标1开始(下标0表示0,不需要),当前总和s,待返回的列表res
l, r, s, res = 1, 1, 0, []
# 当左边界l不超过目标值target的一半时,可能有解,进行循环
while l <= target // 2:
# 若当前总和s大于目标值,则需去掉左边界,且左边界右移
if s > target:
s -= l
l += 1
# 若当前总和s小于目标值,则需加上右边界,且右边界右移
elif s < target:
s += r
r += 1
else:
# 已经找到和为目标值的序列,加入此序列
res.append(list(range(l, r)))
# 然后去掉左边界,且左边界右移,继续寻找下一组符合条件的序列
s -= l
l += 1
return res
829. 连续整数求和
class Solution:
def consecutiveNumbersSum(self, n: int) -> int:
def isKConsecutive(n: int, k: int) -> bool:
if k % 2:
return n % k == 0
return n % k and 2 * n % k == 0
ans = 0
k = 1
while k * (k + 1) <= n * 2:
if isKConsecutive(n, k):
ans += 1
k += 1
return ans