私は、バイナリサーチのためにそれを理解します

二分法

区間[a、b]で連続及びf()・F(B用 )< 、関数f(x)は、2分割され、連続した範囲0:00によって0関数y = f(x)が、二つの端部が徐々に近づいていることを、ゼロ、ゼロ、したがって、近似法を二分法と呼ばれている与えます。

これは、ほとんどがこの方法秒ああを感じるようになった、私の高校と接触した二分法です!彼らは私がバイナリ検索を総括したいので、バイナリ検索頻度が高いビットである見つけるためにコンピュータアルゴリズムを使用することを学ぶために始めるまでが、長い時間の後、ないもの待機を覚えています。

タイトルの結論でそのタイトルを指示:

leetcode 69個の質問に:

int型のsqrt(int型x)関数を実現します。

計算戻るxは非負の整数であり、xの平方根。

戻り型が整数であるため、結果の整数部は、小数部を切り捨て保持します。

 

まず、私はそれがX / 2の平方根未満等しくなければなりませんので、私は、コードをノックし始めたので、私は1,0,2の上にこれらのノードには長い時間のためにもつれ、、、0からのx / 2へのトラバース、先頭を考えました私は右を見つけられませんでしたが、その後、その後、私は私<= Xプッシュに、より多くのリターンよりも上位の要素が*場合トラバーサルの時点で、スタックでやりたいです。その後、私はこの方法を発見し、時間の複雑さを変更しないだけでなく、空間計算量も大きくなっています。のみ慎重にああ読んで本当に見つけること秒後に、問題を解決するには、バイナリサーチを発見された読みます!

1  クラスソリューション{
 2      公共 INT mySqrt(INT X){
 3。         ロング = 0を残し4          ロング右=(X >>> 1)+ +1 ; //私は盲検化されたそれぞれ、>>> 1を欺きますこのビット操作の重要性を忘れてしまった
 5。         しばらくは(左< {右)
 6。             ロング MID =(+右+を左1)/ 2 ;
 7              ロング NUM = MID * MID;
 8              IF(NUM> X){
 9。                  右= MIDを- 1。;
 10              } {
 11。                  左=ミッド;
12              }
 13          }
 14          リターンINTは)左。
15      }
 16 }

私が最も重要なことは、ショートカットを見つける右の境界を見つけ、探しボーダーの半分を見つけることだと思います。

 

おすすめ

転載: www.cnblogs.com/frank9571/p/11988579.html