ほとんどの水で11コンテナ
https://www.cnblogs.com/grandyang/p/4455109.html
次いで、二重現在の状況の高さと小さい高さの中間のスライドへのポインタ、及びサイクルの最大容量を見つけます。
どんなに多くのポインタの高さ、ちょうど2つの2本の柱の間に、それは2の最大容量を決定するため。
クラス解決{ パブリック: INT maxArea(ベクトル< INT >&高さ){ 場合(height.empty()) 戻り 0 。 int型のres = 0 ; INT始める= 0、終了= height.size() - 1 ; 一方(<開始{端) INT H = 分(高さ[開始]、高さ[END])を、 RES = MAX(RES、(エンド-開始)* H)。 時間 ==高さ[開始]?++開始:最後に- 。 } リターンのres; } }。
42.トラップ雨水
https://www.cnblogs.com/grandyang/p/4402392.html
この問題は、ほとんど水で異なる11.コンテナは、ほとんどの水需要で11コンテナは、この問題をインストールすることができるすべての列のために必要な水の量は、2列までの水の量をインストールすることができます。
まだ最初の列へのポインタが最後の列に、エンドポイントを開始し、二重のポインタを使用することができます。その後減少キューを維持するが、全く減少しないが、バック位置へのトラバースを開始するためにこれより小さくなければならないのと等価。この開始位置よりも一回大きく、それは比較として再更新の目的に必要です。
ポールと列の選択コントラスト2つの短いことに注意してください。
クラス解決{ パブリック: int型トラップ(ベクトル< INT >&高さ){ int型 =開始0、終了= height.size() - 1 ; int型のres = 0 ; 一方(<開始{端) INT H = 分(高さ[開始]、高さ[END])を、 もし(H == 高さ[開始]){ int型 TMP = 高さ[開始]。 開始 ++ ; しながら(<エンド&&高始める<[開始] {TMP) RES + = TMP - 高さ[開始]。 開始 ++ ; } } 他{ int型 TMP = 高さ[END]。 エンド - ; 一方、(開始<エンド&&高さ[終了] < TMP){ RES + = TMP - 高さ[END]。 エンド - ; } } } 戻りRES。 } }。
自己除きアレイの238製品
https://www.cnblogs.com/grandyang/p/4650187.html
左と右の二つが格納されていないこのように二つの配列を乗算に全体的な配列。
左から右にすることができますRES [i]は、製品の前面にある場所ではなく、左から右ではないでしょう、それは[i]は、すでにすべての左と前に、我々は計算する必要があり、右の製品ですRESです製品と、それらをうまく掛け合わ変数を使用するには、この時間権利。
実際に、あなたも疲れ乗算する変数を使用することができます左から右に。
クラス解決{ パブリック: ベクトル < INT > productExceptSelf(ベクトル< INT >&NUMS){ ベクトル < INT > RES(nums.size()、1 )。 以下のために(int型 i = 1 ; i)は(nums.sizeを<; iは++ ){ RES [I] =のRES [I- 1 ] * NUMS [I- 1 ]。 } int型の右= 1 。 以下のために(int型 I = nums.size() - 1 ; I> = 0 ; i-- ){ RES [i]は * = 右。 右 * = NUMS [i]は、 } 戻りRESと、 } }。