솔루션 :
이 문제는 슬라이딩 윈도우 알고리즘으로 해결 될 수있다
(즉, 얼라인먼트 스코프) 슬라이딩 윈도우 슬라이딩 윈도우 알고리즘 첫번째 세트는 두 개의 포인터 각각 좌우, 좌측 및 rifght 포인터 포인터 범위를 제한하는
, 윈도우를 슬라이딩 오른쪽과 왼쪽 포인터를 오른쪽으로 이동되고,
모든 슬라이딩 윈도우 배치 발견.
1 개 범위 -이 문제는 연속 양의 정수, 대상 번호에 따라서 생각할 배열은 1의 서열 추구
인해 타겟 대상 시퀀스의 중앙값 수없는 조합하고, 이상과 목표 ; 조성물의 중앙값
: 예를 들어
평균이 11, 즉 6, 6, 6으로 이루어지는 구성 가능 이후,
1 + 2 1 // 대상 행 번호에 따라서 배열 범위,
좌측 포인터가 1로 초기화 , rihgt 포인터도 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