낮은 값이나 높은 값을 증가시키는 방법을 이해하기가 어렵습니다. 예를 들어바이너리 검색, 언제 높게 또는 낮게 늘려야합니까?
,이 leetcode에서 질문 :
구현 INT SQRT (INT X).
내 코드 : 조건이 fufill 후 당신이 볼
class Solution {
public:
int mySqrt(int x) {
if (x<=0) return 0;
int low=1, high=x, mid=0;
while (low<=high){ // should I do low<high?
mid=low+(high-low)/2;
if (x/mid==mid) return mid;
if (x/mid>mid) low= mid+1; //can I just do low=mid?
else high=mid-1; // can I do high =mid?
}
return high; //after breaking the loop, should I return high or low?
}
};
, 나는 low=mid
또는 low=mid+1
을 설정할지 여부를 알 수 없습니다. 왜 mid+1
일까요?
일반적으로 나는 중간 지점에서 낮게 증가해야하는지 아닌지 알아보기가 어렵습니다. 또한 또는 low < high
을 while
루프에 포함시켜야 할 때도 문제가 있습니다.
경우 (X/중반 = = mid) return mid; 여기에서 정사각형이 중간이 아닌 경우 여기에서 반환됩니다. 그래서 우리는 그것을 다시 확인하지 않는 경향이 있습니다. 그래서 우리는 low = mid + 1과 high = mid -1을합니다. – sinsuren
그리고이 방법으로는 소수의 경우를 제외하고 어떤 수의 제곱근도 얻지 못할 것입니다. – sinsuren
여기를 읽어보십시오. 희망이 모든 의심을 해결합니다. http://www.geeksforgeeks.org/square-root-of-a-perfect-square/ – sinsuren