LeetCode-Sqrt(x) -求整数根号-二分搜索
https://oj.leetcode.com/problems/sqrtx/
二分搜索。需要注意每次改变边界时l=mi-1,r=mi+1,否则会死循环。另外可能会有整数溢出的情况,使用long long即可解决。
class Solution { public: int sqrt(int x) { long long l=0; long long r=x; while(r>l){ long long mi=(l+r)/2; long long mi2=mi*mi; if(mi2<x) l=mi+1; else if (mi2>x) r=mi-1; else { l=mi; break; } } if (l*l>x) l--; return l; } };