题解 | #和为S的连续正数序列#

和为S的连续正数序列

http://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe

说明:该代码仅在python3环境下正常运行。python2写出来的看官欢迎在评论区补充。
使用等差数列判断,假设tsum = n+(n+1)+...+(m-1)+m,其中0<n<m且m,n均为整数。则tsum = (2m+n)x(m-n)/2。则当数列的个数为奇数时,最中间的数一定为整数;当数列的个数为偶数时,中间的数一定为0.500000。
👉由于判断连续正数序列的最小长度为2,最大长度t满足,t*(t+1)<=tsum。因此时间复杂度为O(N^(1/2))。

class Solution:
    def findContinuousSequence(self, tsum: int) -> List[List[int]]:
        lst = []
        end = int(pow(2*tsum,0.5)+1)
        for i in range(2,end):
            if int(10*(tsum / i))%10 == 5 and not i&1 and (10*tsum//i)*i//10 == tsum:
                base = tsum // i
                tmp = [base-i//2+x+1 for x in range(i)]
                lst.append(tmp[:])
            elif int(10*(tsum / i))%10 == 0 and i&1 and (10*tsum//i)*i//10 == tsum:
                base = tsum // i
                tmp = [base-i//2+x for x in range(i)]
                lst.append(tmp[:])
        return lst[::-1]

图片说明

全部评论

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务