LeetCode Sqrt(x)解題報告


http://oj.leetcode.com/problems/sqrtx/
つの整数の平方根を求めて、もし整数の平方根が整数でないならば、平方根を返して整理します.
最も簡単な方法は、暴力検索は1からN/2まで検索しますが、TLEができます.
二分サーチ、開始区間は1で、終了区間はxです.
ACコード:
public class Solution {
    public int sqrt(int x) {
        if(x<=1) {
            return x;
        }
        
        int begin = 1;
        int end   = x;
        int middle = 0;
        while(begin<=end) {
            middle = begin + (end - begin)/2;
            //    middle*middle==x,   
            if(middle==x/middle) {
                return middle;
            } else {
                if (middle<x/middle) {
                    begin = middle + 1;
                } else {
                    end = middle - 1;
                }
            }
            
        } 
        //    end  <begin,    end
        return end;
    }
}
この問題はもう一つの変形があります.数xをあげます.完全な平方数かどうかを判断します.基本的な考え方は同じで、2分は1からx/2まで捜索して、終わる条件はbeginの平方がxより大きいのです.