Arranging Coins

easy math binary search

Problem

You have n coins to arrange in a staircase where row i has exactly i coins. Return the number of complete rows.

Inputn = 8
Output3
Rows of size 1, 2, 3 use 6 coins; only 2 left, can't fill row 4.

def arrange_coins(n):
    lo, hi = 1, n
    while lo <= hi:
        mid = (lo + hi) // 2
        used = mid * (mid + 1) // 2
        if used <= n:
            lo = mid + 1
        else:
            hi = mid - 1
    return hi
function arrangeCoins(n) {
  let lo = 1, hi = n;
  while (lo <= hi) {
    const mid = Math.floor((lo + hi) / 2);
    const used = mid * (mid + 1) / 2;
    if (used <= n) lo = mid + 1;
    else hi = mid - 1;
  }
  return hi;
}
class Solution {
    public int arrangeCoins(int n) {
        long lo = 1, hi = n;
        while (lo <= hi) {
            long mid = (lo + hi) / 2;
            long used = mid * (mid + 1) / 2;
            if (used <= n) lo = mid + 1;
            else hi = mid - 1;
        }
        return (int) hi;
    }
}
int arrangeCoins(int n) {
    long long lo = 1, hi = n;
    while (lo <= hi) {
        long long mid = (lo + hi) / 2;
        long long used = mid * (mid + 1) / 2;
        if (used <= n) lo = mid + 1;
        else hi = mid - 1;
    }
    return (int) hi;
}
Time: O(log n) Space: O(1)