タイトル説明
あなたがするアレイ持っていると言う 私 番目の要素は、日に与えられた株式の価格である 私を。
デザインの最大の利益で下さい。あなたによってAT MOST完了することにアルゴリズム TWO 取引を。(2件の取引の最大)
注意:
あなたは(あなたが再び購入する前に、すなわち、あなたが株式を売却しなければならない)、同時に複数の取引に従事することはできません。
アイデア:あなたの手で数を仮定し、今お金がゼロです。buy1、それは私はあなたが、(最大購入、借金ので、そのレコードが負であるので、使用)sell1を購入することができます最低価格を1日目に記録された日に1日目から記録されていますその日の私の日は、あなたが販売、多くのお金が最も稼ぐことができる方法。buy2とsell2前提条件が行わ場合は、最初のトランザクションかどうか、ダウン計算に利益との最初の取引をする前に、i日を持っているということですので、あなたは、との最初の契約していますあなたが取引を行った場合の利益は、計算され、そうして、その2倍のトランザクションの最大値です。あなたは私の日前にしている場合、取引しない、とそうbuy1は、実際には同じ、sell1とsell2が同じである変化がないことをbuy2ません。
クラスのソリューション{ パブリック: int型 MAXPROFIT(ベクトル< int型 >&価格){ IF(prices.size()<= 1 ) の戻り 0 ; int型の buy1 = INT_MIN; int型 sell1 = 0 ; // 販売利益初めて のint = buy2 INT_MIN; INT sell2 = 0 ; // 第二に利益販売、すなわち総利益 のために(INT I = 0 ;私は<prices.size(); ++ I) { buy1= MAX(buy1、 - 価格[I]); sell1 = MAX(sell1、buy1 + 価格[I]); buy2 = MAX(buy2、sell1- 価格[I]); sell2 = MAX(sell2、buy2 + 価格[I]); } 戻りsell2。 } }。