Skip to content

力扣链接:441.排列硬币

难度:⭐

解题关键词:二分查找

解题思路:因为按照等差求和公式,前 k 个完整阶梯所需的硬币数量为 total = (k * (k + 1)) / 2。所以我们去找 k,找到最后一个比 2*total 数小的那个元素。

typescript
function arrangeCoins(n: number): number {
  let left = 1;
  let right = n;
  let result = 0;

  while (left <= right) {
    const mid = Math.floor((right - left) / 2) + left;

    if (mid * (mid + 1) <= 2 * n) {
      result = mid;
      left = mid + 1;
    } else {
      right = mid - 1;
    }
  }

  return result;
}