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

Pythonのすべての停留所を通過するには、バスの最小数を見つけるプログラムが必要です


numsという番号のリストがあり、バス停が路線上にあることを示しているとします。ここで、nums[i]はバスが駅iに到着する必要がある時間を示しています。バスは前進することしかできないので、すべての停留所を通過するために必要なバスの最小数を見つける必要があります。

したがって、入力がnums =[1、2、7、9、3、4]の場合、1つのバスが[1、2、3、4]を停止し、別のバスが[1、2、3、4]を停止できるため、出力は2になります。 7、9]。

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

  • ans:=0

  • 見られる:=長さがnumsと同じで、最初はfalseで埋められたリスト

  • 各インデックスiおよび対応するnの数について、実行します

    • 見た[i]が偽の場合、

      • 見た[i]:=真

      • ans:=ans + 1

      • 前:=n

      • i + 1からnumsのサイズまでの範囲のjについては、次のようにします

        • nums [j]>prevおよびseen[j]がfalseの場合、

          • 見た[j]:=真

          • 前:=nums [j]

  • ansを返す

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

class Solution:
   def solve(self, nums):
   ans = 0
   seen = [False] * len(nums)
   for i, n in enumerate(nums):
      if not seen[i]:
         seen[i] = True
         ans += 1
         prev = n
   for j in range(i+1, len(nums)):
      if nums[j] > prev and not seen[j]: seen[j] = True
         prev = nums[j]
   return ans
ob = Solution()
nums = [1, 2, 7, 9, 3, 4]
print(ob.solve(nums))

入力

[1, 2, 7, 9, 3, 4]

出力

2

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

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

  2. Pythonで1つの文字列を他の文字列のサブ文字列にするために必要な最小数の操作を見つけるプログラム

    2つの文字列sとtがあるとすると、sがtをsの部分文字列にするために必要な操作の最小量を見つける必要があります。これで、各操作で、s内の任意の位置を選択し、その位置の文字を他の任意の文字に変更できます。 したがって、入力がs =abbpqr、t =bbxyの場合、サブストリング bbpqを取得して、pをxに、qをに変更できるため、出力は2になります。 y。 これを解決するには、次の手順に従います- k:=tのサイズ、n:=sのサイズ ans:=10 ^ 10 0からn-kの範囲のiの場合、do ss:=s[インデックスiからi+k-1へ]の部分文字列 ans:=最小のans