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

Pythonで株式IIIを売買するのに最適な時期


i番目の要素がi日目の特定の株式の価格を表す配列があるとします。最大の利益を見つけるためのアルゴリズムを考案する必要があります。最大2つのトランザクションを完了できます。したがって、指定された価格が[3,3,5,0,1,3,1,4]の場合、結果は6になります。これは、4日目(価格0)に購入し、6日目に販売するためです(価格3)なので、利益は3 – 0 =3です。ただし、7日目(価格1)で、8日目(価格4)で販売するため、利益は4 – 1=3です。

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

  • n:=sのサイズ、m:=tのサイズ。 sとtの前に空白を連結して、sとtを更新します

  • サイズ(n + 1)x(m + 1)の行列を1つ作成します

  • dp [0、0]:=1を設定し、次にすべての行の0番目の列に1を設定し、1を入力します

  • 1からnの範囲のiの場合

    • 1からmの範囲のjの場合

      • s [i] =t [j]の場合、

        • dp [i、j]:=dp [i – 1、j – 1]

      • dp [i、j]:=dp [i、j] + dp [i – 1、j]

  • dp [n、m]

    を返します

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

class Solution(object):
   def maxProfit(self, p):
      if not p:
         return 0
      n = len(p)
      dp = [0 for i in range(n)]
      ans = 0
      xmin = p[0]
      for i in range(1,n):
         xmin = min(xmin,p[i])
         dp[i] = max(dp[i],p[i]-xmin)
         ans = max(ans,dp[i])
      xmax = [0 for i in range(n)]
      xmax[-1] =p[-1]
      tempp = 0
      for i in range(n-2,-1,-1):
         xmax[i] = max(xmax[i+1],p[i])
      xmin = [p[-1],n]
      for i in range(n-2,-1,-1):
         tempp = max(tempp,xmax[i+1]-p[i+1])
         ans = max(ans,dp[i]+tempp)
      return ans
ob = Solution()
print(ob.maxProfit([3,3,5,0,1,3,1,4]))

入力

[3,3,5,0,1,3,1,4]

出力

6

  1. Pythonでのベクトル化

    この記事では、Python3.xを使用した実装に関連するベクトル化とさまざまな手法について学習します。またはそれ以前。 ベクトル化とは何ですか? ベクトル化は、ループを使用せずに配列を実装する手法です。代わりに関数を使用すると、コードの実行時間と実行時間を効率的に最小化するのに役立ちます。さまざまな演算が、ベクトルの内積などの配列ではなく、ベクトルに対して実行されています。これは、単一の出力を生成するため、スカラー積とも呼ばれます。外部積は、ベクトルの(長さXの長さ)に等しい次元の二乗行列になります。要素同じインデックスの要素と行列の次元を積む賢明な乗算は変更されません。 内積/内積

  2. 2022 年に売買すべき Craigslist のような 10 のサイト

    Craigslist のようなウェブサイトは、Craigslist がプラットフォームから個人広告セクションを削除し、他の広告を開いているため、大きな需要があります. Craigslist は、クリックするだけで、仕事、必要なアイテム、住宅、コミュニティ サービスなど、必要なものを見つけるのに最適な選択肢です。 それでも、同じ古いインターフェースと、個人的な関係に基づいて広告を見つけることができないため、人々は Craigslist の代替品を探すようになりました.これが、不足している懸念をおそらく解決する Craigslist のような最高のサイトを提供するためにここにいる理由です. A