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