解题时因为忽略了小数情况而浪费了大量时间。
long转float可以隐式转换。因为float 范围更大。这里不转换float 直接使用long运算2146467959 时结果得到0。使用隐式转换可以得到正解。这里我产生了疑问:
((1.0+i)*i) >= n*2.0;
这里为了提高速度,使用了变式运算避免使用了除法。没有了除法为什么还要隐式转换float才可以得到正解呢?运算时没有除法,不会产生小数float在这是一个怎么样的作用呢?
执行用时:27 ms, 在所有 Java 提交中击败了5.35%的用户
内存消耗:35.5 MB, 在所有 Java 提交中击败了62.45%的用户
通过测试用例:1335 / 1335
class Solution {
public int arrangeCoins(int n) {
long res =0;
for(long i = 1;i <= n;i++ ){
if(((1.0+i)*i) >= n*2.0){
if(((1.0+i)*i) == n*2.0){
res = i;
break;
}else{
res = i-1;
break;
}
}
}
return (int)res;
}
}



