株取引の必要なクーリングオフ期間
(媒体)を購入し、クールダウンと証券を売却する309ベストタイム
件名の説明:
株取引の原則は、最終的に得られる最大の利益を求めて、少なくとも1日オフにする必要があり購入する前に購入してから販売することです。
アイデアの分析:
動的なプログラミングのアイデア:
販売[i]は、株式の手の下で最大の利益を表す場合は、取得された後、一日の終わりではありません。
[i]には、一日の終わり後の状況の株式の手の下で最大の利益を表し保持する、それが得られています。
状態遷移方程式はこれです:
今日、または乾燥無[i]には、株式リターンのない手を表し、この可能性が販売されて販売しています。今日はそれを販売することです何の関係もありませんでした[I] =売り[I-1]、今日は売却し、[i]は収入を加えた株式今日は一日前の株価を販売することです販売しています。[I] =ホールド[I-1] +価格を販売[I]
因此:([i]を保持し、[I-1]販売[I-1] +価格)[I] =最大を販売
[i]を保持し、この可能性は、今日または乾燥何も株式を購入することで、利益の株式の手を本日述べました。今日はそれを行うには何も保持することはありませんでした[i]を=保持、その後、今日の株式を購入し、[I-1]開催[I] =販売[I-2] - 価格[I]
因此:([I] [I-2] - 価格販売、[I-1]保持)[I] = maxに保持します
コード:
public int maxProfit(int []prices){
if(prices==null||prices.length==0)
return 0;
int []sell=new int[prices.length];
int []hold=new int[prices.length];
sell[0]=0;
hold[0]=-prices[0];
for(int i=1;i<prices.length;i++){
sell[i]=Math.max(sell[i-1],hold[i-1]+prices[i]);
hold[i]=Math.max((i>=2?sell[i-2]:0)-prices[i],hold[i-1]);
}
return sell[prices.length-1];
}