件名の説明:
i番目の要素が与えられた株式のi日の価格である配列を、与えられました。
あなただけあなたが得ることができる最大の利益を計算するアルゴリズムを設計するために、(つまり、株式を売買する)トランザクションを完了するまで許可されている場合。
あなたが株式を購入する前に株式を売却することはできません。
例
入力:[7,1,5,3,6,4]
出力:5
定義されています。MINVAL =分(MINVAL、価格 [i])と、現在の最低価格の
をmaxP = MAX(をmaxP、価格[ i]は-minval) 現在の最大の利益
クラス溶液(オブジェクト): DEF maxProfit(自己、価格): もし(LEN(価格)<= 1 ): リターン0 MINVAL = 価格が[0] をmaxP = 0 用のI における範囲(LEN(価格)): MINVAL = 分(MINVAL、価格[i])と をmaxP = MAX(をmaxP、価格[I] - MINVAL) のリターンをmaxP
最高の時間LeetCode(122)2つの売買銘柄
件名の説明:
i番目の要素が与えられた株式のi日の価格である配列を、与えられました。
あなたが得ることができる最大の利益を計算するアルゴリズムを設計します。あなたは、可能な限り(株式を売買)より取引を閉じることができます。
注:同時に複数のトランザクション(あなたは秋の前に再び株式を購入する前に売却しなければならない)に関与することはできません。
例
入力:[7,1,5,3,6,4]
出力:7
解像度:
株式を売却するポリライン、ローエンドの購入のためのポリライン上昇、ハイエンドの上昇のみを購入
割引、P(N)-p(1で連続上昇がある場合 )=(P(N)-p(n-1)は) +(P(N-1) -p(N-2))+ ... +(P(2)-p(1))、P(1) 最低の折り目線、P(n)が最高ポリラインで
等価ルールとの競合が、買いに販売する月の途中で同じ日に、しかし、一貫性のある結果
クラス溶液(オブジェクト): DEF maxProfit(自己、価格): N = LEN(価格) であれば、N <= 1 : リターン0 をmaxP = 0 用のI における範囲(1 、N): もし価格が[I]>価格[I -1 ]: TMP =価格[I] -prices [I-1 ] をmaxP + = tmpの リターンをmaxP
最高の時間LeetCode(123)株式3を売買します
件名の説明:
i番目の要素が与えられた株式i日の価格である配列を、与えられました。
あなたが得ることができる最大の利益を計算するアルゴリズムを設計します。次の2つのトランザクションまでに完了することができます。
注:同時に複数のトランザクション(あなたは秋の前に再び株式を購入する前に売却しなければならない)に関与することはできません。
例
入力:[3,3,5,0,0,3,1,4]
出力:6
入力:[1,2,3,4,5]
出力:4
入力:[7,6,4,3,1]
出力:0
解像度:
DP1 [I] = MAX(DP [I-1]、価格[I] - MINVALは) 私は(私はどうか販売日までに確認された)日の間の1日目に最大の利益を示す、前後を横断します;
DP2は、[i]は= MAX(DPは、[I + 1]、MAXVAL -価格[i])とされ、最大の利益との最後の日に、i番目の日を示す前方トラバーサルから、(購入して一日の私に確認したかどうか);
MAX(DP1 + DP2)、(DP1 + DP2は)[i]が最大の利益の日の後、最後の二つのトランザクションへの最初の日からちょうど表しRES =、私たちの目標は、私が総利益を上げる最大のを見つけることです。
クラス溶液(オブジェクト): DEF maxProfit(自己、価格): N = LEN(価格) であれば、N <= 1 : リターン0 のelif N == 2 : もし価格が[1] < 価格が[0] を返す0 他: リターン価格[1] - 価格[0] 他: DP1 = [0 ため _ 中範囲(N)] DP2 = [0 ため _ 中範囲(N)] MINVAL = 価格[0] MAXVAL =価格[-1 ] のための I における範囲(1 、N): MINVAL = 分(MINVAL、価格[I]) DP1 [I] = MAX(DP1 [I-1]、価格[ I] - MINVAL) のための J における範囲(N-2、-1、-1 ): MAXVAL = MAX(MAXVAL、価格[J]) DP2 [J] = MAX(DP2 [J + 1]、maxval- 価格[ J]) DP = [DP1 [I] + DP2 [i]のための I における範囲(N)] 戻り MAX(DP)
費用を含む株式を売買する最高の時間LeetCode(714)
件名の説明:
I日間の株価のi番目の要素を表す整数の価格、の配列を指定して、非負の整数料は株式取引の手続きのコストを表しています。
あなたは時代のトランザクション数に制限を完了することができますが、各トランザクションのための手数料を支払う必要があります。あなたが株式を購入した場合、あなたは、もはや株式を購入し続けることができる前に、それを販売していません。
利益の最大値を返します。
例
入力:価格= [1、3、2、8、4、9]、料金= 2
出力:8
クラスソリューション(オブジェクト): DEF MAXPROFIT(セルフ、価格、料金): N- = lenは(価格) IF N- <2 : リターン0 ANS = 0 #のレコードトラフ バレー= 価格[0] のための I における範囲(1。、N- ): #は下の谷、前に捨てられた谷を見つける IF価格[I] < バレー: バレー = 予約[I] #の価格[I] -fee:料控除ピーク #は控除ピーク比料金を見つけますバレー高 のelifの価格[I] -fee>バレー: #累積差 ANS + =(価格[i]が-fee) - バレー #の新料控除としてピークこの谷 #のような手頃な価格の報酬を決定する限り、最初のセクションのような連続増加を考慮すると、 谷を=価格[I] - 手数料 を印刷(" バレー:" 、バレー)が 返す ANSを