57-2およびs連続正シーケンス-python

トピック:正の数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つのポインターの数値の合計が目標値よりも小さい場合、後方ポインターは右に移動します。合計がが目標値よりも大きい場合、フロントポインタは右に移動します。値が目標値と等しい場合は、保存済みリストに追加されます。最適化は早期に終了します。前のポインターがターゲット値の半分を超えると、最適化を終了できます。

おすすめ

転載: blog.csdn.net/wh672843916/article/details/105503761
おすすめ