java的二分法求一個數的平方根


class Solution {

    public int mySqrt(int x) {
        // 注意:針對特殊測試用例,例如 2147395599
        // 要把搜索的范圍設置成長整型
        // 為了照顧到 0 把左邊界設置為 0
        long left = 0;
        // # 為了照顧到 1 把右邊界設置為 x // 2 + 1
        long right = x / 2 + 1;  //對於一個非負數n,它的平方根不會大於(n/2+1)
        while (left < right) {              //在left與right中尋找
            // 注意:這里一定取右中位數,如果取左中位數,代碼會進入死循環
            // long mid = left + (right - left + 1) / 2;
            long mid = (left + right + 1) >>> 1;    //左移一位與直接除二相比有巨大的時間差
            long square = mid * mid;
            if (square > x) {
                right = mid - 1;     //如果大於了則上界減一
            } else {
                left = mid;          //如果小於了則下界補上來
            }
        }
        // 因為一定存在,因此無需后處理
        return (int) left;
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM