解決策:
この問題は、スライディングウィンドウアルゴリズムを用いて解くことができる
(すなわち、アライメントスコープ)スライディングウィンドウスライディングウィンドウアルゴリズムの最初のセットは、二つのポインタ、それぞれ、左と右、左及びrifghtポインタポインタ範囲を限定することを
、スライディングウィンドウを左右の手のポインタが右に移動され、
すべてがスライディングウィンドウに配置された見つけます。
この問題は、正の整数の連続した配列を求めて、ターゲット番号することが考えられる構成は、1 - 1の範囲、
および標的による標的、標的の配列の中央値にすることはできません組み合わせ、より大きいへ組成物の中央値;
例えば:
中央値、すなわち6,6および6からなる配列によって可能その後の、11であり、
従って1から1 + 2 //対象に数値範囲を配列し、
左ポインタを1に初期化されます、rihgtポインタも1に初期化され、各範囲は、範囲(1 +右、左)が算出される
。値が少ないターゲットより大きい場合、右+ = 1、
値が目標より大きい場合、+ = 1左、
それは同じ目標値である場合、また同時に高める必要性を右手、左を追加する必要があります。
- 各要素の先頭でのみ、左プラス1を見つける必要があるので、1セット内に配置されています。
- 現在の右と確かに1 +右へ左より大きく左と、そのため、時間の複雑さを低減し、右を追加し、操作アップスピード。
コードは以下の通りであります:
class Solution:
def findContinuousSequence(self, target):
left = 1
right = 1
result = []
while right <= (target//2 + 1):
cur_sum = sum(list(range(left, right + 1)))
if cur_sum < target:
right += 1
elif cur_sum > target:
left += 1
else:
result.append(list(range(left, right + 1)))
left += 1
right += 1
return result