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

图片说明

全部评论

相关推荐

亲爱滴达瓦里氏:又有嵌软又有FPGA又有硬件的,三个方向显得你的简历太杂糅了,展示不出你在某一个方向有哪些技术栈。基本上也不会有企业会去招一个本科的全栈工程师。HR一般是看你的技术栈是否和招聘要求匹配才发面试的。如果你想三个方向都试试的话还是建议你分成三份不同的简历根据不同岗位来投。多看看****或牛客上面的招聘信息,根据上面要求的技术栈来写简历。看了你的帖子经历这一块还是过关的,不过看的每个方向都会一点,但每个方向优势都不突出。 还有就是要海投,你这才几十份算不了啥。去年投了一两百份的大有人在。多去跑跑线下招聘吧,有机会继续搞份实习,后面转正机会大些。有条件就多往北上广深投吧。武汉竞争还是太激烈了。
我的秋招日记
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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