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

Pythonで利益を上げるために待つ最小日数を見つけるプログラム


会社の毎日の株式市場価格を時系列で表す価格のリストがあるとします。インデックスiの値が、利益を上げるまで待たなければならない最小日数となる同じ長さのリストを見つける必要があります。利益を上げるそのような方法がない場合、値は0である必要があります。

したがって、入力がprices =[4、3、5、9、7、6]のような場合、出力は[2、1、1、0、0、0]

になります。

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

  • ans:=価格と同じサイズのリストで、0を入力します
  • q:=新しいリスト
  • 価格の各インデックスiと価格pについて、
    • qが空ではなく、p> qの最後の項目の2番目の値である場合、
      • j:=qの最後の要素の最初のアイテム
      • ans [j]:=i --j
      • qから最後の要素を削除する
    • qの最後に(i、p)を挿入
  • 回答を返す

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

class Solution:
   def solve(self, prices):
      ans = [0 for _ in prices]
      q = []
      for i, p in enumerate(prices):
         while q and p > q[-1][1]:
            j = q[-1][0]
            ans[j] = i - j
            q.pop()
         q.append((i, p))
      return ans

ob = Solution()
prices = [4, 3, 5, 9, 7, 6]
print(ob.solve(prices))

入力

[4, 3, 5, 9, 7, 6]

出力

[2, 1, 1, 0, 0, 0]

  1. Pythonでマージした後も、最小数の色を見つけるプログラムが残っています

    色のリスト(R、G、B)があるとします。これで、2つの異なる色が隣り合っている場合、それらは3番目の色の単一の色のアイテムに変換できます。そのような変換の可能なシーケンスの後に残っているそれらの最小数を見つける必要があります。 したがって、入力がcolors =[G、 R、 G、 B、 R]の場合、以下のように変換できるため、出力は1になります- これを解決するには、次の手順に従います- n:=色のサイズ 色に異なる色が1つしかない場合は、 return n n <=1の場合、 return n x:=0 d:=キーと値のペアを持つマップ{( R、1)、(

  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