LeetCode力扣刷题:441.排列硬币
暴力法解决如下:
int arrangeCoins(int n){
int line=0,m=n;
while(true)
{
line++;
m=m-line;
if(m<=line)
break;
}
return line;
}
12 ms 5.4 MB
使用等差数列求和公式版的暴力法:
完整的等差数列求和必然是 (n+1)*n/2
使用这个算式需要考虑内存溢出的情况,所以对line的申请要用long
int arrangeCoins(int n){
long line =0;
while(true)
{
line++;
if( (line+1)*line/2 >n)
break;
}
return line-1;
}
执行用时:
16 ms, 在所有 C 提交中击败了21.45%的用户
内存消耗:
5.5 MB, 在所有 C 提交中击败了30.69%的用户
看评论区见到的一种暴力法,与我的第一种方法思想差不多
int arrangeCoins(int n) {
int tmp = n;
if(n==1)
return 1;
for (int i = 1; i <= tmp; ++i) {
n -= i;
if (n < 0) {
return i - 1;
}
}
return 0;
}
二分法的解答看了一些,感觉不如我的暴力法[doge]