题解 | #和为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]

图片说明

全部评论

相关推荐

01-29 15:45
已编辑
华中科技大学 前端工程师
COLORSN:可以试一下,小厂看技术栈是不是很落后,如果太拉胯就别去,个人认为有实习氛围比你自己琢磨要高效不少,然后就是小厂其实也有可能会问的很难,这都比较难说,还是看自己项目含金量够不够,寒假还能不能推进学习再选择,毕竟去实习过年就10天假了
点赞 评论 收藏
分享
01-04 21:30
已编辑
河南工业大学 Java
27届学院本誓死冲击...:下次再发把个人信息隐藏掉,以防有心之人。相关课程删了,荣誉奖项只留蓝桥杯,把蓝桥杯写到教育经历里,按教育经历、实习经历、项目经历、专业技能这个顺序排版
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务