和为S的连续正数序列(python)

心已赠人 2022-10-02 00:37 294阅读 0赞

文章目录

  • 题目
  • 解答
    • 解法1:滑动窗口

题目

和为S的连续正数序列

解答

解法1:滑动窗口

使用滑动窗口来求解这道题,核心思想就是设定一个大小不固定的窗口来圈住目标列表,如果列表中的数据满足条件就添加到答案中,否则就动态的移动该滑动窗口。

  1. # -*- coding:utf-8 -*-
  2. class Solution:
  3. def FindContinuousSequence(self, tsum):
  4. """ 使用滑动窗口的方法来解决, 设定一个动态的窗口,p_low指向窗口头部, p_high指向窗口尾部,窗口之间的值,为目标值。 如果目标值为tsum,那就是其中一个解。否则移动窗口。 :param tsum: """
  5. #错误判断处理,如果小于3的话 无解
  6. if tsum < 3:
  7. return []
  8. #设定初始的滑动窗口大小
  9. p_low = 1
  10. p_high = 2
  11. ans = []
  12. while p_low < p_high:
  13. #计算滑动窗口现在圈中的大小
  14. cur_sum = sum(range(p_low,p_high+1))
  15. if cur_sum == tsum:
  16. #找到一组解,并记录到ans数组中。
  17. ans.append(range(p_low,p_high+1))
  18. #移动滑动窗口,并寻找下一组解。
  19. p_high = p_high + 1
  20. elif cur_sum < tsum:
  21. p_high = p_high + 1
  22. else :
  23. p_low = p_low + 1
  24. return ans
  25. if __name__ == '__main__':
  26. s = Solution()
  27. print s.FindContinuousSequence(100)

发表评论

表情:
评论列表 (有 0 条评论,294人围观)

还没有评论,来说两句吧...

相关阅读

    相关 S连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100