leetcode 121売買株式取引株式へのベストタイム、動的プログラミングのベストタイム

leetcode 121売買株式取引株式へのベストタイム、動的プログラミングのベストタイム

leetcode 2020 3月1日、質問、毎日パンチ

タイトル:
i番目の要素が与えられた株式のi日の価格である配列を、与えられました。あなただけあなたが得ることができる最大の利益を計算するアルゴリズムを設計するために、トランザクション(すなわち買いと株式を売却)を完了するまで許可されている場合。あなたが株式を購入する前に株式を売却することはできません。

例1:
入力:[7,1,5,3,6,4]
出力:5
説明:2日目(= 1つの株価)、5日目(株価= 6)ときに買い、販売、最大の利益= 6-1 = 5。
販売価格は購入価格よりも大きくなければならないので、利益は、= 6 7-1できないことに注意してください。
実施例2:
入力:[7,6,4,3,1]
出力:0
説明:この場合には、トランザクションが完了していない、最大の利益は0です。

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock

アイデア:パイソンダイナミックプログラミング:iが最大=最大給付日前{I-1最大の利益の前日、当日の価格I - I-1前日の最低価格}。

ただ、非常に単純な2サイクルを十分に感じて、質問を見て開始し、その後、残業、私はどのように私はとてもナイーブました。ソリューションああを考えての動的な規制を発見するのが得意であるために!最も恐ろしい事は私も移動規制でこの質問を考えていなかった、です。

タイムアウトコード:

class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        best=0
        for i in range(0,len(prices)):
            for j in range(i+1,len(prices)):
                mon=prices[j]-prices[i]
                if mon>0 and mon>best:
                    best=mon
        
        return best

詳細:

  1. リスト内の最小の要素を探している:A =分(リスト)
  2. リスト1 [:I]:要素0,1,2で表さリスト...、I-1

動的なプログラミングコード:

class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        # 动态规划:前i天的最大收益 = max{前i-1天的最大收益,第i天的价格-前i-1天中的最小价格}
        max_i=0
        for i in range(1,len(prices)):
            max_i=max(max_i,prices[i]-min(prices[:i]))
        
        return max_i
               

このブログは、ソースを示し、この記事へのリンクを添付してください、指導を歓迎再現し、オリジナル作品です、ありがとうございました!

公開された20元の記事 ウォンの賞賛1 ビュー197

おすすめ

転載: blog.csdn.net/weixin_43973433/article/details/104917037