i番目の要素が与えられた株式のi日の価格である配列を、与えられました。
あなただけあなたが得ることができる最大の利益を計算するアルゴリズムを設計するために、(つまり、株式を売買する)トランザクションを完了するまで許可されている場合。
あなたが株式を購入する前に株式を売却することはできません。
例1:
入力:[7,1,5,3,6,4]
出力:5
説明:2日目(= 1つの株価)、売り切れの際は、5日目(株価= 6)に、購入します、最大の利益= 6-1 = 5。
販売価格は購入価格よりも大きくなければならないので、利益は、7-1 = 6ではないことに注意してください。
例2:
入力:[7,6,4,3,1]
出力:0を
説明する。この場合、トランザクションが完了していない、最大の利益はゼロです。
方法a:2つのトラバース
時間と空間の消費量!!
1 クラスソリューション{ 2 公共: 3 INT maxProfit(ベクトル< INT >&価格){ 4 INT MAX_VALUE = 0 。 5 int型のres; 6 場合(prices.size()<= 1)戻り 0 ; 7 のための(int型 I = prices.size() - 1 ; iが> = 0 ; i-- ){ 8 のための(INT J = I- 1、J> = 0 ; j-- ){ 9 RES =価格[I] - 価格[J]。 10 であれば(RES> MAX_VALUE)MAX_VALUE =のRES。 11 } 12 } 13 リターンMAX_VALUE。 14 } 15 }。
方法2:配列中に、最大シーク
1 クラスソリューション{ 2 公共: 3 INT maxProfit(ベクトル< INT >&価格){ 4 ベクトル< INT > トレンド。 5 あれば(prices.size()< 2 ) 6 { 7 戻り 0 ; 8 } 9 のための(int型 I = 0 - ; iがprices.size()< 1 ; iが++ ) 10 { 11 trend.push_back(価格[I + 1] -価格[I]); // ストック構成アレイの毎日の株価の浮き沈み 12である } 13は、 14 のint SUM = 0 ; 15 int型の最大=トレンド[ 0 ]; 16 用(INT I = 0 ;私はトレンド<サイズ(); Iは++) // 最大変化サブアレイアレイと計算 17。 { 18は SUM => SUM 0 SUM +?トレンド[I]:トレンド[I]; 19。 最大=最大> SUMの?最大:SUM、 20であります } 21は、 最大=最大< 0?0:最大; 22 リターン最大。 23 } 24 }。