import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param x int整型 * @return int整型 */ public int sqrt (int x) { int left = 0; int right = x; while(left<=right){ int mid = (left+right)/2; if((long)mid*mid>x){ right = mid-1; }else{ left = mid+1; } } return right; } public int sqrt(int x) { int left = 0; int right = x; while(left<=right){ int mid = (left+right)/2; if((long)mid*mid>x){ right = mid-1; }else if((long)mid*mid<x){ left = mid+1; }else{ // 刚好等于的情况,直接返回 return mid; } } // 找不到等于,就返回right return right; } }
本题知识点分析:
1.二分查找
2.数学模拟
本题解题思路分析:
1.寻找 k平方 小于等于 x 的k
2.直接二分查找就可以,选择left=0为左边界,right=x为右边
3.注意(long)来强制转化,因为int*int可以会溢出,因此强制类型转化为Long
4.最后返回的是right,可能会不太好理解,那换第二种解法就比较好理解了
本题使用编程语言: Java
如果你觉得本篇文章对你有帮助的话,可以点个赞支持一下,感谢~