重新认识二分法

刚学完二分法时,觉得这个太弱了,只能在一个有序的数组中找特定的元素。实际上,二分法远比我想象中的强大。二分法的基本功能是在一个区间中找到目标值。有很多问题,都可以描述成在区间内查找一个值来解决。

最近遇到一道算法题,求一个浮点数的立方根。一开始怎么也没想到用二分法来解决,见代码,

 public double func(double x) {
        if (x == 0 || x == 1 || x == -1) {
            return x;
        }
        double left = x > 0 ? 0 : x;
        double right = x > 0 ? x : 0;
        double mid;
        double target;
        while (left < right) {
            mid = (left + right) / 2;
            target = mid * mid * mid;
            if (target > x) {
                right = mid;
            } else if (target < x) {
                left = mid;
            } else {
                return mid;
            }
        }
        return 0;
    }

不管是求一个数的平方根还是立方根,都可以采用二分法的思维来处理,最终的结果都在一个有序的区间中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值