78. Best Time to Buy and Sell Stock II
5564 ワード
道しるべ 回以上の取引所が生み出す最大の利益を計算した.
12号の「株を売買する好機」問題の第2弾問題は、何度も取引ができる点が異なる.
この問題は1回の取引しかないので、低点と高点だけチェックしました.
今では何度も取引ができます.
解法は下がる前に売って、上がる前に買うことができます.
現実的には不可能ですが、この問題で次の上げ下げの可否を事前に知ることができ、手数料もないので何度か取引できます. の「貪欲」な意味にぴったりのグリディアルゴリズムの問題と言える. <複数回取引の最大収益>
次は値上げして買って、次は値下げして売って、いつも絵を買って売っているように変えます. 次の値が現在より高い場合は、常に利益を得る形で実際のコードを実現すればよい. が上昇を続けている場合、何度でも売買できるため、一歩一歩が利益をむさぼる貪欲な構造に現れる.
以前の回答は段階的に値上げされたのか、毎回比較的に回答しています.
しかし、よく考えてみると、計算される利益が も同様に貪欲な構造であり、同様の結果を得ることができる.
1.階調アルゴリズム(76 ms)
class Solution:
def maxProfit(self, prices: List[int]) -> int:
result = 0
#값이 오르는 경우 매번 그리디 계산
for i in range(len(prices) - 1):
if i in range(len(prices) - 1):
if prices[i + 1] > prices[i]:
result += prices[i + 1] - prices[i]
return result
この問題は1回の取引しかないので、低点と高点だけチェックしました.
今では何度も取引ができます.
解法は下がる前に売って、上がる前に買うことができます.
現実的には不可能ですが、この問題で次の上げ下げの可否を事前に知ることができ、手数料もないので何度か取引できます.
次は値上げして買って、次は値下げして売って、いつも絵を買って売っているように変えます.
2.ダウンジャケット(72ミリ秒)
class Solution:
def maxProfit(self, prices: List[int]) -> int:
#0보다 크면 무조건 합산
return sum(max(prices[i + 1] - prices[i], 0) for i in range(len(prices) - 1))
以前の回答は段階的に値上げされたのか、毎回比較的に回答しています.
しかし、よく考えてみると、計算される利益が
0
より大きいたびに、無条件に合計することができます.Reference
この問題について(78. Best Time to Buy and Sell Stock II), 我々は、より多くの情報をここで見つけました https://velog.io/@corone_hi/78.-Best-Time-to-Buy-and-Sell-Stock-IIテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol