トピック住所:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
問題解決のアイデア:暴力のソリューション
我々は最大の利益は「I」を知っていることを知っているトピックによると - 時間の複雑さはO(n個の* n)であるように、「J」の差が、結果を得ることができ、スペースの複雑さはO(1)です。以下では、ソースです。
INT maxProfit(ベクトル< INT >&価格){ int型のサイズ= prices.size()。 場合(サイズ<= 0 ) { 戻り 0 ; } int型の最大値= 0 。 以下のために(int型 i = 0 ; iは、サイズ< 1 I ++; ) { ための(int型 J = iは+ 1、J <サイズ、J ++ ) { 場合(価格[j]が-prices [I]> MAX) 最大 =価格[jで] -価格[i]は、 } } リターン最大。 }
結果は予想外ではない残業。
問題解決のアイデアII:
アイデアは、私たちが今、いくつかのアイデアを開き、多くの不必要な計算による暴力のタイムアウトを解決することです。
図に示すように:
事実で見つかった、最大の利益の数字谷とピーク(ピークはピークの後に発生)、2の高さが最大の利益です。主な制約のでピークは、ピークの後に発生し、我々が判断した場合、現在のピークと谷、それそれが株式を売却するために登場した後最高峰です。
(Pで示される)新しいピークの出現は、ピーク電流(電流)よりも低くなった後、その後、最大の利益、この時点で2つのだけの可能性、違いが1つ電流ピークの後で、新たなピークが最も高いトップが登場しましたピークのための違いは、新しい谷以降後に現れました。この時間は、古い谷が戻って結果には影響を与えませんので、だから私たちは、それぞれの低いピークが発生し、最大の利益のピークを評価し、記録する必要があり、我々は、更新する必要があります。
INT maxProfit(ベクトル< INT >&価格){ int型のサイズ= prices.size()。 場合(サイズ<= 0 ) { 戻り 0 ; } int型の分=価格[ 0 ]。 int型 maxprices = - 1 ; 以下のために(int型 i = 0 ; iは、サイズ<I ++の) { 場合(価格[I] < 分) { 分 =価格[I]を、// 新的峰谷 } 他 { 場合(価格[I] -min> maxprices) maxprices =価格[I] - 分。 } } 戻り maxpricesと、 }