和为S的连续正数序列(python)
文章目录
- 题目
- 解答
- 解法1:滑动窗口
题目
和为S的连续正数序列
解答
解法1:滑动窗口
使用滑动窗口来求解这道题,核心思想就是设定一个大小不固定的窗口来圈住目标列表,如果列表中的数据满足条件就添加到答案中,否则就动态的移动该滑动窗口。
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
""" 使用滑动窗口的方法来解决, 设定一个动态的窗口,p_low指向窗口头部, p_high指向窗口尾部,窗口之间的值,为目标值。 如果目标值为tsum,那就是其中一个解。否则移动窗口。 :param tsum: """
#错误判断处理,如果小于3的话 无解
if tsum < 3:
return []
#设定初始的滑动窗口大小
p_low = 1
p_high = 2
ans = []
while p_low < p_high:
#计算滑动窗口现在圈中的大小
cur_sum = sum(range(p_low,p_high+1))
if cur_sum == tsum:
#找到一组解,并记录到ans数组中。
ans.append(range(p_low,p_high+1))
#移动滑动窗口,并寻找下一组解。
p_high = p_high + 1
elif cur_sum < tsum:
p_high = p_high + 1
else :
p_low = p_low + 1
return ans
if __name__ == '__main__':
s = Solution()
print s.FindContinuousSequence(100)
还没有评论,来说两句吧...