이분법 요약 (A)를 찾기

제목 설명

구현 int sqrt(int x)기능.

계산하여 반환 X 있어서, 제곱근을 x는 음수가 아닌 정수입니다.

리턴 타입은 정수이기 때문에, 결과의 정수 부분은 소수 부분은 버림 유지한다.

예 1 :

输入: 4
输出: 2

예 2 :

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 
     由于返回类型是整数,小数部分将被舍去。

내 대답

class Solution {
    public int mySqrt(int x) {
        if(x==0){
            return 0;
        }
        if(x==1){
            return 1;
        }
        int left=0;
        int right=x;
        while(left<right){
            int middle=left+(right-left)/2;
            if(x/middle==middle){
                return middle;
            }else if(x/middle>middle){
                if(x/(middle+1)>middle+1){
                    left=middle;
                }else if(x/(middle+1)==middle+1){
                    return middle+1;
                }else if(x/(middle+1)<middle+1){
                    return middle;
                }
            }else{
                right=middle;
            }
        }
        return -1;
    }
}

개요

X / 중간 중간 ==

원래 코드에 사용되는 중간 * 중간 == x는하지만, 문제는 발생할 것이다 광장의 중앙이 최대 정수보다 클 수 있기 때문에

다른 언덕에서 돌 : X / 2에 대한 경계 값 오른쪽 사람, x의 제곱근 미만 또는 X / 2와 같아야한다.

또한, 경계 값으로 지불주의, 코드가 0,1 덜 판단하는 경우, 코드는 완전하지 않습니다.

출시 사 원저 · 원 찬양 한 · 전망 (48)

추천

출처blog.csdn.net/weixin_43638682/article/details/103983524