美文网首页
[python2] 57_1和为S的连续正数序列

[python2] 57_1和为S的连续正数序列

作者: cca1yy | 来源:发表于2019-08-26 21:51 被阅读0次
    题目描述
    # -*- coding:utf-8 -*-
    class Solution:
        def FindContinuousSequence(self, tsum):
            # write code here
            if tsum < 3: #若给定tsum < 3,则没有合适的整数序列满足和小于3
                return []
            # 仍然使用左右两个指针,这两个指针限定了一个连续正数序列
            leftNum = 1
            rightNum = 2
            middleNum = (1 + tsum) / 2
            result = []
            while leftNum < middleNum: #由于正数序列从小到大逐个增加,因此大于和S的半数之后,之后的组合都已经遍历过,无需再次遍历
                sumNum = 0
                resultTemp = []
                for index in range(leftNum, rightNum + 1): #对两个指针内的正数序列求和
                    resultTemp.append(index)
                    sumNum += index
                if sumNum == tsum:
                    result.append(resultTemp)
                    rightNum += 1 #即使已经求得了和为S的正数序列,仍然不能停止搜索,继续增加右指针的值,寻找下一个合适的正数序列
                elif sumNum > tsum:
                    leftNum += 1 #若左右指针限制的正数序列和大于S,则丢弃最小的数;若丢弃最大的数,则重复了上一步添加最大数的操作,不会满足
                else:
                    rightNum += 1 # 若左右指针限制的正数序列和小于S,则将右指针后移一位,整数序列变长
            return result
    

    相关文章

      网友评论

          本文标题:[python2] 57_1和为S的连续正数序列

          本文链接:https://www.haomeiwen.com/subject/ijrjectx.html