排列硬币
题目 排列硬币
思路分析
初始想法是预处理出每行放满后一共有多少个
找完整行数就是找≤x的最后那个数
后面发现可以直接找mid
通过计算mid * (mid + 1) / 2去与结果比较即可
即把预处理简化成每次找的时候check一次
代码实现
class Solution {
public:
int arrangeCoins(int n) {
long long l=0,r=n;
while(l<r)
{
long long m=(l+r+1)/2;
if(m*(m+1)/2<=n)
l=m;
else
r=m-1;
}
return r;
}
};
💬 评论