問題への毎日の温度(LeetCodeミディアム難易アルゴリズムタイトル)ソリューション

LeetCode質問番号739メディア難易気温 

件名の説明:

毎日の温度のリストによると、リストを再構築し、対応する位置を入力すると、温度がその日の日数を超えて上昇するまで待機する必要がどのくらいです。すべての後、増加していない場合は、場所での代わりに0を使用してください。

例えば、温度= [73、74、75、71、69、72、76、73]のリストを与えられた、あなたが出力[1、1、4、2、1、1、0、0]であるべきです。

ヒント:温度範囲リストの長さは、[1、30000]です。各華氏温度値であり、範囲[30、100]の整数です。

 

これは適度に困難な課題であるが、対象を読んだ後、行うことは本当に難しい、または(単にAC用)少しでも簡単ではないことがわかりますが、

非常に単純な要件は、配列を返すせ、新たな位置に対応する配列は、最初の場所なし場合、その距離値より大きい、または0である見つけるために、将来の対応する位置のアレイに被写体を表し、アレイを受けます。

その上で簡単なループを通るが渡されました。

1  クラスソリューション{
 2      公共の intは、[] dailyTemperatures(INT [] T){
 3          のint [] ANS = 新しい INT [T.length]。
4          のためにint型 i = 0; iはT.length-1 <; iは++ ){
 5つの              ANSを[I] = 0 ;
6              のためのint型 J = I + 1、J <T.length; J ++ ){
 7                  であれば(T [j]> T [I]){
 8つの                      ANS [I] = J- I;
9                      ブレーク;
10                  }
 11             }
 12          }
 13          リターン年。
14      }
 15 }

 この方法で、あなたが交流をすることができますが、効率的ですか?

第1のACスクリーンショット後:

 

 223ms- - 、個々の死におびえ。それが唯一の30%。

私の意見では、最初の問題は、第二の目的は、最適化することで、目標の交流を磨くことです。

- - 私は最適化しません、また、スラグ残留しています。 - しかし、leetcodeに大きな牛があります - 。

大きな牛の言葉だけで直接コードより:

1  クラスソリューション{
 2     公共の INT [] dailyTemperatures(INT [] T){
 3      int型の長さ= T.length;
 4      INT [] =結果新しい新しい INT [長さ];
 5  
。6      // 左右トラバーサルまでから
7。     ためINT長さ= I - 2; I> = 0; i-- ){
 8          // J =結果+ [J]は結果の一部ジャンプしなければならないの使用である
。9          ためINT。J = I + 1、J <長さ; + J = 結果[J]){
 10              IF(T [J]> T [I]){
 11                 結果[I] = J - Iは、
 12である                 BREAK ;
 13である              }  IF(結果[J] == 0){ // 0遭遇は、以下の値は、その後のコース電流値が0でなければならない、大きくないことを示し
14                  件の検索結果[I] = 0 ;
 15                  BREAK ;
 16              }
 17          }
 18である     }
 19。 
20      リターン結果、
 21である }
 22れます }

- - 何もわずか数行よりも弟より鶏肉料理のように変化していないように見えます。

しかし、我々はギャングスターコード、ACのスクリーンショットを見て

 4msのは、私の鶏肉と野菜は200の以上のMSに比べて私は兄でちょうど弟です。

私たちは、兄の素晴らしいアイデアを分析するためにあまり話をしませんでした。

コアコードを直接見:

1  // 右トラバーサル左に
2      ためint型 I =長さ- 2; I> = 0; i-- ){
 3。         // J =結果+ [J]はジャンプしなければならない結果のいくつかを使用することである
4。         ためINT Jは= I + 1、J <長さ、J + =。結果[J]){
 5。             IF(T [J]> T [I]){
 6。                  結果[I] = J - I;
 7。                 BREAK ;
 8。              }  IF(結果[J]が== 0){ // 0遭遇は、以下の値が大きくないことを示し、その後、もちろん、現在の値は0でなければならない
。9                  結果[I] = 0 ;
 10                  BREAK 11              }
 12          }
 13      }
 14  
15  著者:pulsaryu
 16:リンクHTTPSを:// leetcode-cn.com/problems/daily-temperatures/solution/jie-ti-si-lu-by-pulsaryu/
 17  出典:(ボタンステーLeetCode)
 18著者によって予約の著作権。商業転載は非商用の転載は、ソースを明記してください、権限の作者に連絡してください。

ギャングの習慣 - コード書かれたコメント。

一部の人々は本当に私たちの具体的な読書を理解して、分析しない場合があります。

まず第一に、我々は確かに、配列の各要素の値を横断しなければなりません。その後、我々はポイントが比較の過程にある最適化することができます。

対象要件を思い出して、我々は最初の位置に戻って、現在の位置から見ている(実際には、貧しい次のターゲットである)彼の位置との距離の値よりも大きいです。

次いで、メモリにこの距離によって返された配列の位置に対応する上付き。

我々は、すべて前面から背面トラバーサルに垂直たいです。しかし、この質問は、私たちが持っていたすべての時間を見て後方にトラバースします。その後、我々はすなわち、右から左の友人に、後ろから試すことができます。

そして、これに基づいて、その後さらに見えます。

このような利点は、それのために私たちの未来で、リアの位置は、既に計算されています。

私たちは前から後ろにトラバースする場合は、次に我々は今までの位置は、次の位置を見つけるために継続することになるまで、大きな値のより多くのある場所を見つけるための位置を比較することができます。

我々はそれの後ろに位置を数えるする必要がある場合は?

写真ギャング見て:

 

 71 71 71よりも第1の大きい位置の後ろにある第二の要素を示す位置値2に対応します。

私たちがジャンプすることができますこの方法です。私たちは75の位置を求めます。小さなより現在位置の後部あれば、私たちが見ていずれかで、このような不要jを++持っていないことを、私たちが直接することができ、振り返ってみるとき

要素の値、即ち、後部結果[J]のジャンプは、我々がj ++のない、比較器75とは違い75のインデックスを返す場合、我々は、直接J = J +は[j]をもたらすことができます。

値0が表す現在位置と結果[J] ==の後方位置よりも小さい場合?大きくないリアJ jの位置の位置を表すためです。大きい位置よりもオフJの現在位置。現在の位置それ

後で、その位置よりも大きい直接的な結果を見つけることができなかった[I] = 0を見つけます。

我々だけで、その後内側のループから抜け出す前と現在位置の各計算値の後の要素を横断します。

実際には、ビット使用される文字列のパターンマッチングのKMPアルゴリズム次配列をジャンプのアイデアなど、このアイデア。

あなたはKMPは、学習のポイントの下に接続されていることができるかわからない場合

https://blog.csdn.net/sinat_37537673/article/details/73331135

 

- - 私は通常の2年生の鶏肉料理、ちょうどポーター、好きではないが、スプレーしないでくださいよ。 

おすすめ

転載: www.cnblogs.com/vibe/p/11725533.html