LeetCode 441 排列硬币[数学] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 441 排列硬币[数学] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
利用等差数列的性质,我们可以轻松得到 k * (k + 1) = 2 * n
,那么二分法查找符合条件的k即可,代码如下:
class Solution {
public:
int arrangeCoins(int n) {
int left = 1, right = n;
while(left < right) {
int mid = (right - left + 1) / 2 + left;
if((long long)mid * (mid + 1) <= (long long)2 * n) {
left =mid;
} else {
right = mid - 1;
}
}
return left;
}
};
第二种方法就是纯粹的数学方法,利用求根公式轻松解决,代码如下:
class Solution {
public:
int arrangeCoins(int n) {
return (sqrt((long long)8 * n + 1) - 1) / 2;
}
};
以上是关于LeetCode 441 排列硬币[数学] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章