계단이라는 숫자 목록과 또 다른 값 k가 있다고 가정합니다. 우리는 현재 계단 0에 있으며 계단의 마지막 인덱스로 올라가고 싶습니다. 계단[i] 값은 인덱스에서 도달하는 비용을 나타내며 각 라운드에서 한 번에 1, 2, ... k 계단을 점프할 수 있습니다. 마지막 계단까지 오르기 위한 최소 비용을 찾아야 합니다.
따라서 입력이 계단식 =[4, 11, 11, 3, 2] k =3인 경우 계단식[4, 3, 2]
을 사용할 때 출력값은 9가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다.
-
q :=이중 종료 대기열 및 쌍(stairs[0], 0)을 삽입합니다.
-
범위 1에서 계단 크기까지의 경우 다음을 수행하십시오.
-
동안 i - q[0, 1]> k, 수행
-
q의 왼쪽에서 항목 제거
-
-
비용 :=q[0, 0] + 계단[i]
-
q가 비어 있지 않고 curcost <=q의 마지막 항목의 첫 번째 값인 동안 수행
-
q에서 마지막 요소 삭제
-
-
q의 끝에 (curcost, i) 삽입
-
-
q의 마지막 항목의 첫 번째 값을 반환
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시
from collections import dequeclass Solution:def solve(self, Stairs, k):q =deque([(stairs[0], 0)]) for i in range(1, len(stairs)):while i - q[0][1]> k:q.popleft() curcost =q[0][0] + Stairs[i] 동안 q 및 curcost <=q[-1][0]:q.pop() q .append((curcost, i)) return q[-1][0]ob =Solution()stairs =[4, 11, 11, 3, 2]k =3print(ob.solve(stairs, k))사전>입력
[4, 11, 11, 3, 2], 3출력
9