タイトル軍は日月ごとに一つの質問を(株式を売買するための最良の時間)をバックル9
:私は次のようにブラシの電源ボタンで多くの学生、この質問が要求され、今日があると信じている
i番目の要素が与えられた株式i日の価格である配列、を考えます。
あなただけあなたが得ることができる最大の利益を計算するアルゴリズムを設計するために、トランザクション(すなわち買いと株式を売却)を完了するまで許可されている場合。
注意、あなたは株式を購入する前に株式を売却することはできません。
まず、素子の特性を横切ることができることは一日、売買を表し、質問の意味、それは整数型順不同リストであることを意味配列、与えられた、リストはインデックスを持って、反復することができ、アクションの一日だけすることができ購入するだけ購入または売却、同じ日に購入し、販売することはできませんそれらのいずれか、または販売すること。
これは良いノート、与えられた配列であるという仮定を必要とする[11,6,4,8、]、あなたが販売した後に購入することができない,,つまり、購入と販売が十分ではありません、今では最大の利益を求めて必要なことに注意してください、そして、最大の利益に関係なく、購入するか、どのように伴う売買限度に、販売する方法をしない仕事、かつての缶はまた、購入と販売ではないので、リストの最大値と最小値の差が最大の利益、最小値が固定されており、そこに固定なしている最大値は、である必要がありますインデックスの最大値は、インデックスの最小値よりも大きくなっていること、これは利益を最大化するために適切な時期です。それが最大のマイナス最小値が最大の違いであるのは、利益ですが、購入して販売することはできません、インデックスの最大値が小さい最小値のインデックスを超える場合の条件はまだされていない場合ので、あなたは、最大と最小の時間を比較する必要があります満足し、インデックスが最小値よりも大きいインデックス値に沿って、より少ない最小、減算うち最大値と最小値よりも、までときに、直接次のコードの最大利益の数との差:
def maxProfit(prices) -> int:
n = len(prices)
if n == 0 or n == 1:
return 0
min_price = prices[0]
profit = 0
for i in range(1, n):
if prices[i] < min_price:
min_price = prices[i]
if prices[i] - min_price > profit:
profit = prices[i] - min_price
return profit
print(maxProfit([11,6,4,8]))
至此,本题解答完毕!!