Python
 Computer >> コンピューター >  >> プログラミング >> Python

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
    • hが空でない間は、
      • [val、index]:=h [0]
      • インデックス>=i --kの場合、
        • ループから抜け出す
      • それ以外の場合、
        • ヒープからトップを削除しますh
    • ans:=nums [i] + val
    • ペア(ans、i)をヒープhに挿入します
  • 回答を返す

理解を深めるために、次の実装を見てみましょう-

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

  1. Pythonですべてのポイントを接続するための最小コストを見つけるためのプログラム

    (x、y)の形式のいくつかの点を持つpointsという配列があるとします。ここで、2つのポイント(xi、yi)と(xj、yj)を接続するコストは、それらの間のマンハッタン距離であり、式は| xi--xj|です。 + | yi--yj|。すべてのポイントを接続するための最小コストを見つける必要があります。 したがって、ここでの合計距離は(6 + 5 + 3 + 8)=22です。 これを解決するには、次の手順に従います- points_set:=範囲0からポイントのサイズ-1までの数値を保持する新しいセット ヒープ:=ペア(0、0)でヒープを作成します visited_node:

  2. Pythonでチェスの騎士が目標位置に到達するための最小ステップを見つけるプログラム

    2つの値rとcがあるとします。チェスの騎士が無限に大きなチェス盤の最初の座標(0、0)に配置されている場合、その場所(r、c)に到達するために必要な最小移動回数を見つける必要があります。騎士はチェスと同じ動きのスタイルに従います。水平方向に2マス、縦に1マス、または縦に2マス、横に1マス移動します。 したがって、入力がr =6、c =1の場合、出力は3になります。赤は初期位置、緑は最終位置、黄色は中間ステップです。 これを解決するには、次の手順に従います- r