排列硬币
解题思路:
-
根据等差数列求和公式可知,前 k 个完整阶梯行所需的硬币数量为 total = k*(k+1)/2;
-
可以通过二分查找计算 n 枚硬币可形成的完整阶梯行的总行数;
复杂度:
-
时间复杂度:O(logn);
-
空间复杂度:O(1);
代码实现:(左闭右闭区间的二分)
var arrangeCoins = function (n) {
let left = 1,
right = n;
while (left <= right) {
const mid = left + (right - left) >> 1;
// 当 小于等于的时候成立
if (mid * (mid + 1) / 2 <= n) {
left = mid + 1;
} else {
right = mid - 1;
}
}
// 由于成立的时候,多加了一次 1,此处减掉
return left - 1;
};
1539.第 k 个缺失的正整数
上一篇