原题链接:441. 排列硬币
solution:
暴力做法:
class Solution {
public:
int arrangeCoins(int n) {
int i;
for(i = 1;i <= n; i++){
n-=i;
}
return i-1;
}
};
二分:注意计算n个台阶硬币总和公式为等差数列求和(首项+末项)*项数/2
class Solution {
public:
//Check函数
long long sum(long long x){
return (x*(x+1))/2;
}
int arrangeCoins(int n) {
int l = 0,r = n;
while(l < r){
int mid = (long long)l+r >> 1;
if(sum(mid) >= n) r = mid;
else l = mid + 1;
}
if(sum(l) > n) return l-1;
return l;
}
};