美文网首页
【算法】排硬币 - 二分法/牛顿迭代

【算法】排硬币 - 二分法/牛顿迭代

作者: 王月亮17 | 来源:发表于2024-04-07 18:30 被阅读0次

题目

假设有n枚硬币,要摆一个阶梯形,第一行1个,第二行2个,以此类推,看n枚硬币能摆多少行,返回行数。未摆满行的不算。

原理

二分法

先假设放 x 行需要 m 个硬币,用 m 与 n 对比,大于 n 则缩小 x,否则增大 x,直到算出结果。

牛顿迭代

1 + 2 + 3 + …… + x = (x * x + x) / 2 = n,所以 x = 2n - x 的平方根。求平方根可以用牛顿迭代,我们可以先设 x = n,如果 2n - x 的平方根 = x,则返回结果,否则让 x 等于计算出的平方根,如果递归,直到计算出结果。

代码

二分法

    public static void main(String[] args) {
        System.out.println(coinByDichotomy(10));
    }

    private static int coinByDichotomy(int n) {
        int low = 1, high = n;
        while (low <= high) {
            int mid = (high - low) / 2 + low;
            if ((mid * mid + mid) / 2 == n) {
                return mid;
            }
            if ((mid * mid + mid) / 2 > n) {
                high = mid - 1;
            } else if ((mid * mid + mid) / 2 < n) {
                low = mid + 1;
            }
        }
        return low - 1;
    }

牛顿迭代

    public static void main(String[] args) {
        System.out.println(coinByNewton(10));
    }

    private static int coinByNewton(int n) {
        if (n == 0 || n == 1) {
            return n;
        }
        return (int) sqrtByNewton(n, n);
    }

    private static double sqrtByNewton(double x, int n) {
        double res = (x + (2 * n - x) / x) / 2;
        if (res == x) {
            return res;
        }
        return sqrtByNewton(res, n);
    }

相关文章

  • 无约束凸优化算法

    本章涉及知识点1、scipy库求解全局最优和局最优2、多元函数的极值求解算法3、牛顿迭代法算法4、牛顿迭代法求解多...

  • 二分法、牛顿法、梯度下降法求解开根号

    求解开根号() 二分法1)迭代公式:2)令,若;若。3)重复1)、2)过程,直到或(是一个很小的正数)。 牛顿法迭...

  • [机器学习必知必会]牛顿法与拟牛顿法

    前言 同梯度下降法一样,牛顿法和拟牛顿法也是求解无约束最优化问题的常用方法。牛顿法本身属于迭代算法,每一步需要求解...

  • 优化算法--牛顿迭代法

    博客搬家至 Mun: https://kiddie92.github.io 简书同步更新 牛顿法给出了任意方程求根...

  • 学习面试题-阿里篇

    1.如何实现一个高效的单向链表逆序输出? 递归与非递归方式 二分法,牛顿迭代法已知 sqrt(2)约等于 1.41...

  • 牛顿迭代

  • 牛顿迭代

    牛顿迭代:例题为求平方根:若x*x=n,求x;设f(x)=x*x-n;画图可得;当xn这点做切线,切向处与x轴相交...

  • 记--平方根的算法

    Java实现牛顿迭代法: C/C++实现3d游戏引擎算法实现1/sqrt(x),改一下返回值成为sqrt()算法:...

  • L-BFGS算法

    BFGS算法是用来求解最优化问题的,在这个算法中,相对于普通的牛顿迭代法有很大的改进。链接:http://blog...

  • C语言 川大复试 笔记

    命令行, 6_11 迭代法平方根e 6_12牛顿法求方程根 6_13二分法求fangchenggen 6_1 最大...

网友评论

      本文标题:【算法】排硬币 - 二分法/牛顿迭代

      本文链接:https://www.haomeiwen.com/subject/wxootjtx.html