在Python中找到达到最终索引的最小成本,并最多使用k个步骤

在Python中找到达到最终索引的最小成本,并最多使用k个步骤

假设我们有一个数字列表nums和一个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到nums大小的i ,执行以下操作
    • val:=0
    • while h不为空,则执行以下操作
      • [val,index]:= h [0]
      • 如果index≥i-k,则退出循环
      • 否则,删除堆h顶部
    • ans:=nums [i] +val
    • 将成对(ans,i)插入到堆h中
  • 返回ans

让我们看下面的实现以更好地了解 –

更多Python相关文章,请阅读:Python 教程

示例

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程