Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 최대 k 단계로 최종 인덱스에 도달하기 위한 최소 비용을 찾는 프로그램

<시간/>

숫자 num과 다른 값 k의 목록이 있다고 가정합니다. 여기서 nums[i]의 항목은 지수 i에 도달하는 비용을 나타냅니다. 인덱스 0에서 시작하여 nums의 마지막 인덱스에서 끝나는 경우. 각 단계에서 우리는 위치 X에서 최대 k 단계 떨어진 위치로 이동할 수 있습니다. 마지막 인덱스에 도달하려면 비용 합계를 최소화해야 하므로 최소 합계는 얼마가 될까요?

따라서 입력이 nums =[2, 3, 4, 5, 6] k =2와 같으면 출력은 12가 됩니다. 2 + 4 + 6을 선택하여 최소 비용 12를 얻을 수 있기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • ans :=0
  • h :=빈 힙
  • 0에서 숫자 크기 범위의 i에 대해
    • 값:=0
    • h가 비어 있지 않은 동안 do
      • [val, index] :=h[0]
      • 인덱스>=i - k인 경우
        • 루프에서 나오다
      • 그렇지 않으면
        • 힙에서 상단 삭제
    • ans :=nums[i] + val
    • 힙 h에 쌍(ans, i) 삽입
  • 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

from heapq import heappush, heappop
class Solution:
   def solve(self, nums, k):
      ans = 0
      h = []
      for i in range(len(nums)):
         val = 0
         while h:
            val, index = h[0]
            if index >= i - k:
               break
            else:
               heappop(h)
         ans = nums[i] + val
         heappush(h, (ans, i))
      return ans

ob = Solution()
nums = [2, 3, 4, 5, 6]
k = 2
print(ob.solve(nums, k))

입력

[2, 3, 4, 5, 6], 2

출력

12