题目:实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
解一:二分法
class Solution {
public int mySqrt(int x) {
if (x <=1 ) {
return x;
}
int low = 1, high = x;
int mid = low+(high-low)/2;
int sqrt = x/mid;
while (low<=high) {
if(sqrt == mid){
return mid;
}else if(sqrt<mid){
high = mid-1;
}else{
low = mid+1;
}
}
return high;
}
}
解二:牛顿迭代法
class Solution {
public int mySqrt(int x) {
if (x <=1 ) {
return x;
}
double res = 1, double last = 0;
while (res!=last) {
last = res;
res = (res+x/res)/2
}
return (int)res;
}
}
二分法查找:
//一般的二分法,不要求出现重复值时返回最左的值(最靠前的)
class Solution {
public int mySqrt(int[] arr,int key) {
int low = 0, high = arr.length-1;
int mid = low+high/2;
while (low<=high) {
if(arr[mid]==key){
return mid;
}else if(arr[mid]>key){
high = mid-1;
}else{
low = mid+1;
}
}
return -1;
}
}
二分法查找变种
//当数组中出现重复元素,需要查找最左元素时。
class Solution {
public int mySqrt(int[] arr,int key) {
int low = 0, high = arr.length-1;
int mid = low+high/2;
while (low<high) {
if(arr[mid]>=key){
high = mid;
}else{
low = mid+1;
}
}
return low;
}
}
本文详细介绍了两种求解整数平方根的有效算法:二分法和牛顿迭代法。通过具体的代码示例,展示了如何在非负整数范围内精确找到目标数的平方根的整数部分。
261

被折叠的 条评论
为什么被折叠?



