Find Continuous Sequence Sum to Target
DP, BruteForce
Last updated
DP, BruteForce
Last updated
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序9[[2,3,4],[4,5]]class Solution:
def FindContinuousSequence(self, tsum):
#
#method2: 穷举
#Time O(n^2) Space: O(1) if not consider res
# 1. iterate every value i in [1, tsum]
# 2. find the continuous sum ended at i in the second loop
# if sum < tsum, then continue adding new value j-1
#
res = []
for i in range(1, tsum):
sum_val = 0
sol = []
for j in range(i,0, -1):
sum_val += j
sol.append(j)
if sum_val == tsum:
sol.reverse()
res.append(sol[:])
elif sum_val > tsum:
break
return res
# -*- coding:utf-8 -*-
class Solution:
def FindContinuousSequence(self, tsum):
# write code here
#method 1: sliding window
# Time:O(n*k), n = array size, k= average window size
#method2: backtracking
#
#
#
#
if tsum == 0:
return 1
left, right =1,2
sum_val = left+right
res = []
sol = [left,right]
while right <tsum:
if sum_val < tsum:
right += 1
sum_val += right
sol.append(right)
elif sum_val > tsum:
sol.pop(0)
sum_val -= left
left += 1
else:
res.append(sol[:])
right += 1
sum_val += right
sol.append(right)
return res