leetcode 얼굴 질문 57 - II 연속 긍정적 시퀀스 S (파이썬)의 수.

그림 삽입 설명 여기
솔루션 :
이 문제는 슬라이딩 윈도우 알고리즘으로 해결 될 수있다
(즉, 얼라인먼트 스코프) 슬라이딩 윈도우 슬라이딩 윈도우 알고리즘 첫번째 세트는 두 개의 포인터 각각 좌우, 좌측 및 rifght 포인터 포인터 범위를 제한하는
, 윈도우를 슬라이딩 오른쪽과 왼쪽 포인터를 오른쪽으로 이동되고,
모든 슬라이딩 윈도우 배치 발견.

1 개 범위 -이 문제는 연속 양의 정수, 대상 번호에 따라서 생각할 배열은 1의 서열 추구
인해 타겟 대상 시퀀스의 중앙값 수없는 조합하고, 이상과 목표 ; 조성물의 중앙값
: 예를 들어
평균이 11, 즉 6, 6, 6으로 이루어지는 구성 가능 이후,
1 + 2 1 // 대상 행 번호에 따라서 배열 범위,
좌측 포인터가 1로 초기화 , rihgt 포인터도 1로 초기화되며, 각각의 범위는 범위를 산출한다 (좌, 1 + 오른쪽)
값이 적은 목표보다 다음 오른쪽 + = 1 인 경우는
값이 목표보다 큰 경우, + = 1 왼쪽으로
는 동일한 타겟 값이라면, 또한 동시에 증가 할 필요에서 오른쪽, 왼쪽을 추가해야합니다;

  1. 각 요소의 초기에는 오직 왼쪽 플러스 1을 발견 할 필요가 있으므로, 하나 개의 세트로 구성되고;
  2. 오른쪽 따라서 + 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
게시 된 100 개 원래 기사 · 원의 찬양 3 ·은 10000 +를 볼

추천

출처blog.csdn.net/cy_believ/article/details/104859712