Sqrt(x)

来源:互联网 发布:java程序猿年终总结 编辑:程序博客网 时间:2024/05/22 11:04

Question

Implement int sqrt(int x).

Compute and return the square root of x.

My Solution

class Solution {public:int mySqrt(int x) {/*** binary search a from [0, x], where a^2 = x.*/if (x < 0) return 0;return BSearchByLoop(x);}int BSearch(int x, int start, int end) {/*** binary search a from [start, end], where a^2 = x.* Note: when x is very big, stack overflow exception occurs.** 1. if start > end, then return -1;* 2. tmp = (start + end) / 2* 3. if tmp^2 = x, then return tmp;* 4. if tmp^2 < x, then return BSearch(x, tmp + 1, end);* 5. if tmp^2 > x, then return BSearch(x, start, tmp - 1);*/if (0 == x || 1 == x) return x;if (start >= end) {if (start * start <= x) return start;else return start - 1;}int mid = (start + end) / 2;if (mid * mid == x) return mid;else if (mid * mid < x) return BSearch(x, mid + 1, end);else return BSearch(x, start, mid - 1);}int BSearchByLoop(int x){/*1. if 0 == x or 1 == x, then return x;2. start = 0, end = x.3. if start > end, then return end;4. mid = (start + end) / 2;5. if mid^2 == x, return mid;6. if mid^2 > x, end = mid - 1; jmp 3;7. if mid^2 < x, start = mid + 1; jmp 3;*/if (0 == x || 1 == x) return x;int start = 0, end = x;while (start <= end){long long mid = (end - start) / 2 + start; // mid*mid is probably bigger than 2^32if (mid * mid == x) return mid;else if (mid * mid > x) end = mid - 1;else start = mid + 1;}return end;}};

0 0
原创粉丝点击