You have a total of n coins that you want to form in a staircase shape, where every k-th row must have exactly k coins.
Given n, find the total number of full staircase rows that can be formed.
n is a non-negative integer and fits within the range of a 32-bit signed integer.
Example 1:
n = 5 The coins can form the following rows: ¤ ¤ ¤ ¤ ¤ Because the 3rd row is incomplete, we return 2.
Example 2:
n = 8 The coins can form the following rows: ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ Because the 4th row is incomplete, we return 3.
int arrangeCoins(int n) {
// (k + 1) * k / 2 = n
// k^2 + k = 2n --> k <= sqrt(2n) + 1
int k_at_most = sqrt(2)*sqrt(n) + 1;
int left = n - (k_at_most + 1) * k_at_most + n;
while(left < 0) {
--k_at_most;
left = n - (k_at_most + 1) * k_at_most + n;
}
return k_at_most;
}