69. Sqrt(x)
1.問題
實作sqrt

2.想法
提問
function header, parameter
test input
說明想法
edge case: x == 0
binary search
初始狀態為left = 1, right = x
當x / mid == mid, 回傳mid
當x / mid > mid 時
表示目標在mid右邊, 因此讓left = mid
或是目標介於mid * mid與x間, 回傳mid
當x / mid < mid時
表示目標在mid左邊, 因此讓right = mid
或是目標介於x 與 mid * mid間, 回傳x
測試計算複雜度
3.程式碼
class Solution {
public:
int mySqrt(int x) {
return binarySearch(1, x, x);
}
private:
int binarySearch(long left, long right, long target) {
if (left > right) {
return 0;
}
long mid = (left + right) / 2;
long x = target / mid;
if (mid == x) {
return mid;
}
if (x > mid) {
if (x - mid == 1) {
return mid;
}
return binarySearch(mid + 1, right, target);
} else {
if (mid - x == 1) {
return x;
}
return binarySearch(left, mid - 1, target);
}
}
};
Last updated