二分法
区間[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 }
私が最も重要なことは、ショートカットを見つける右の境界を見つけ、探しボーダーの半分を見つけることだと思います。