LeetCode 69 x的平方根
问题描述:
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
执行用时:2 ms, 在所有 Java 提交中击败了63.01%的用户
内存消耗:35.9 MB, 在所有 Java 提交中击败了83.23%的用户
暴力二分:
- 对[1,x-1]区间直接采用二分进行暴力搜索
- 平方根取到整数位,因此要采用mid、mid+1两个值来与目标值x对比
- Math.pow(mid, 2)<=x && Math.pow(mid+1, 2)>=x则返回mid、mid+1中的一个
/**
* @author CodeSPA
* @date 2020/5/27 - 18:55
*/
class Solution {
public int mySqrt(int x) {
if(x<=1) {
return x;
}
//1. 暴力法,直接在[1,x-1]的范围内二分查找寻找
//结果向下取整
int left = 1, right = x-1;
int mid = left + (right-left)/2;
long curr = 0, next = 0;
while(left<right) {
curr = (long)Math.pow(mid, 2);
next = (long)Math.pow(mid+1, 2);
if(curr<=x && next>=x) {
break;
}
else if(curr>x) {
right = mid-1;
}
else if(next<x){
left = mid+1;
}
mid = left + (right-left)/2;
}
return next==x? mid+1: mid;
}
}