leetcode 69 x的平方根
一、题目描述
二、解题思路
整体思路:
由于最终返回的结果可以把向量分为两段,结果及其左边的数的平方值小于等于x,结果右边数的平方值大于x,具有“二段性”,所以可以用二分法来解决这个问题,实质上就是在查找右边界。
具体思路:
(1)首先进行边界处理,由于x可能小于1,所以当x小于1时,它的平方根肯定小于1,直接返回0;
(2)使用二分法查找右边界
//查找右边界
int left=1,right=x;
while(left<right){
long long mid=left+(right-left+1)/2;
if(mid*mid<=x) left=mid;
else if(mid*mid>x) right=mid-1;
}
三、代码实现
时间复杂度:T(n)=O(log2)
空间复杂度:S(n)=O(1)
class Solution {
public:int mySqrt(int x) {//边界处理if(x<1) return 0;//查找右边界int left=1,right=x;while(left<right){long long mid=left+(right-left+1)/2;if(mid*mid<=x) left=mid;else if(mid*mid>x) right=mid-1;}return left;}
};