トピック:正の数sを入力し、合計がsである(少なくとも2つの数を含む)すべての連続する正の数を出力します。
def find_continuous_seq(target):
if target<3:
return -1
begin,end = 1,2
res = []
mid = target/2
s = begin + end
while begin<=mid:
if s==target:
temp = []
i = begin
while i<=end:
temp.append(i)
i+=1
res.append(temp)
end += 1
s += end
elif s<target:
end+=1
s+=end
elif s>target:
s-=begin
begin+=1
return res
注:2つのポインターも使用されますが、今回は同じ側にあり、後方に移動します。現在の2つのポインターの数値の合計が目標値よりも小さい場合、後方ポインターは右に移動します。合計がが目標値よりも大きい場合、フロントポインタは右に移動します。値が目標値と等しい場合は、保存済みリストに追加されます。最適化は早期に終了します。前のポインターがターゲット値の半分を超えると、最適化を終了できます。