public int arrangeCoins(int n) {
long start = 1, end = n, mid = 0;
while (start + 1 < end) {
mid = start + (end - start) / 2;
if (isGreaterThanN(mid, coins)) {
return isGreaterThanN(end, coins) ? (int)start : (int)end;
public boolean isGreaterThanN(long row, long coins) {
return (row * row + row) > 2 * coins;