441. 排列硬币

发布时间 2023-12-19 15:32:59作者: isomer莫柒瑜

441. 排列硬币

你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。

给你一个数字 n ,计算并返回可形成 完整阶梯行 的总行数。

二分答案

本题为一个还算简单的二分答案,我对二分答案的理解是:
我们需要用二分搜索去找到一个数,而这个数要符合其他要求,这个要求就是check函数的功能,也就是答案。
要找的是可以形成完整一行的,所以向下取整。

class Solution {
public:
    bool check(long long m,long long n){
        long long sum=(m*(m+1))>>1;
        if(sum<=n)return 1;
        else return 0;
    }
    int arrangeCoins(int n) {
        long long l=1,r=1e9;
        while(l<r){
            long long mid=(l+r+1)>>1;
            if(check(mid,n))l=mid;
            else r=mid-1;
        }
        return r;
    }
};