方法1:使用了库函数(库函数一般都要比自己写的快)执行用时 : 6 ms
class Solution {
public int arrangeCoins(int n) {
int m = (int)Math.sqrt(2*(long)n);
if(m*(m+1)>(2*n))//这是为了以防类似3*4>3.1^2的情况的出现
{
return m-1;
}
else
{
return m;
}
}
}
方法2:使用二分法(O(logn)) 执行用时 : 8 ms
class Solution
{
public int arrangeCoins(int n)
{
if(n<=1) return n;
long start=0;
long end=n;
long i=0;
while(end>start)
{
i=(start+end)/2;
if(i*(i+1)<=(long)2*n)
{
start=i+1;
}
else
{
end=i;
}
}
return (int)start-1;//因为最后的情况是start*(start+1)正好稍大于2*n
}
}
方法3:for循环(O(√n))执行用时 : 22 ms