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

Pythonで終了位置に到達するために必要な最小ホップ数を見つけるためのプログラム


すべての要素が正である1つの配列numがあるとします。インデックス0にいます。ここで、配列の各要素は、その位置での最大ジャンプ長を表します。私たちの目標は、ジャンプの数を減らして、最終的なインデックス(n-1、nはnumsのサイズ)に到達することです。したがって、配列が[2,3,1,1,4]のようである場合、出力は2になります。これは、0からインデックス1にジャンプしてから、最後のインデックスであるインデックス4にジャンプできるためです。

これを解決するには、次の手順に従います-

  • 終了:=0、ジャンプ:=0、最も遠い:=0
  • 0からnumsの長さの範囲のiの場合– 1
    • farthest:=farthestとnums[i]+iの最大値
    • iが終了し、iがnums – 1の長さでない場合、
      • ジャンプを1つ増やします
      • end:=最も遠い
  • リターンジャンプ

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

class Solution(object):
   def jump(self, nums):
      end = 0
      jumps = 0
      farthest = 0
      for i in range(len(nums)):
         farthest = max(farthest,nums[i]+i)
         if i == end and i != len(nums)-1:
            jumps+=1
            end = farthest
      return jumps
ob = Solution()
print(ob.jump([3, 4, 3, 0, 1]))
>

入力

[3, 4, 3, 0, 1]

出力

2

  1. Pythonを使用してすべてのノードに到達するための頂点の最小数を見つけるプログラム

    n個の頂点とノードに0からn-1までの番号が付けられた有向非巡回グラフがあるとします。グラフはエッジリストで表されます。ここで、edges [i] =(u、v)はノードuからノードv。グラフ内のすべてのノードに到達できる頂点の最小セットを見つける必要があります。 (頂点は任意の順序で返すことができます)。 したがって、入力が次のような場合 これらの2つの頂点は他のどの頂点からも到達できないため、出力は[0,2,3]になります。したがって、それらから開始すると、すべてをカバーできます。 これを解決するには、次の手順に従います- n:=エッジのサイズ all_nodes:=

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

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