1.思路
浮点数二分的本质也是边界, 唯一区别是浮点数没有整除, 区间长度可以严格的缩小一半,当区间长度足够小时, 便可以认为是一个数.
拿一道题来举例好说明一点,求一个数的立方根 https://www.acwing.com/problem/content/792/
2.代码模板
double l = -10000, r = 10000; //l是给出的数据范围的下边界,r是给出的数据范围的上边界
while (r - l > 1e-8) { // 精度为1e-8
double mid = (l + r) / 2; //中点
if (mid * mid * mid >= target) //因为是求立方根所以是mid^3,求平方根就mid的平方就行,target是要求立方根的那个数
r = mid;
else
l = mid;
}
3.复杂度分析
- 时间复杂度:O(logn)
- 空间复杂度:O(1)
4.注意
精度可以根据题目要求来更改,一般为题目要求保留的位数再多精确两位。