441. 排列硬币
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;
}
};