题目:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
def continuous(sum_):
small, big = 1, 2
mid = (sum_+1) // 2
cursum = 0
ans = []
cur = big + small
while small < mid:
if cursum == sum_:
ans.append([i for i in range(small, big+1)]
while small < mid and cursum > sum_:
cursum -= small
small += 1
if cursum == sum_:
ans.append([i for i in range(small, big + 1)]
big += 1
cursum += big
return ans
思路:
双指针, big指针在前面逐渐增加, small指针在后面, 当cursum大于target时, 逐一递减, 指针向前.