基础算法练习:在不使用sqrt(x)函数的情况下,得到x的平方根的整数部分
public class SquareRoot {
public static void main(String[] args) {
/**
*
* 在不使用sqrt(x)函数的情况下,得到x的平方根的整数部分
* 重点考察:二分法、牛顿迭代
*/
System.out.println(blast(4)+"\t"+blast(8)+"\t"+blast(9));
System.out.println(binarySearch(4)+"\t"+binarySearch(8)+"\t"+binarySearch(9));
}
// 暴力破解
public static int blast(int num) {
for (int i = 0; i < num; i++) {
int j = i + 1;
if (i * i <= num && j * j > num) return i;
}
return -1;
}
// 二分法 ,时间复杂度 log2 N (2是底数)
public static int binarySearch(int num) {
int index = -1;
int left = 0, right = num;//二分查找的左右边界
while (left <= right) {
int middle = left + (right - left) / 2;
if (middle * middle <= num) {
index = middle;
left = middle + 1;
} else {
right = middle - 1;
}
}
return index;
}
}