All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0401_0500.s0441_arranging_coins.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0401_0500.s0441_arranging_coins;

// #Easy #Math #Binary_Search #Binary_Search_I_Day_6
// #2022_07_16_Time_2_ms_(95.97%)_Space_41.8_MB_(28.06%)

/**
 * 441 - Arranging Coins\.
 *
 * Easy
 *
 * You have `n` coins and you want to build a staircase with these coins. The staircase consists of `k` rows where the ith row has exactly `i` coins. The last row of the staircase **may be** incomplete.
 *
 * Given the integer `n`, return _the number of **complete rows** of the staircase you will build_.
 *
 * **Example 1:**
 *
 * ![](https://assets.leetcode.com/uploads/2021/04/09/arrangecoins1-grid.jpg)
 *
 * **Input:** n = 5
 *
 * **Output:** 2
 *
 * **Explanation:** Because the 3rd row is incomplete, we return 2. 
 *
 * **Example 2:**
 *
 * ![](https://assets.leetcode.com/uploads/2021/04/09/arrangecoins2-grid.jpg)
 *
 * **Input:** n = 8
 *
 * **Output:** 3
 *
 * **Explanation:** Because the 4th row is incomplete, we return 3. 
 *
 * **Constraints:**
 *
 * *   1 <= n <= 231 - 1
**/
public class Solution {
    public int arrangeCoins(int n) {
        if (n < 0) {
            throw new IllegalArgumentException(
                    "Input Number is invalid. Only positive numbers are allowed");
        }
        if (n <= 1) {
            return n;
        }
        if (n <= 3) {
            return n == 3 ? 2 : 1;
        }
        // Binary Search space will start from 2 to n/2.
        long start = 2;
        long end = n / 2;
        while (start <= end) {
            long mid = start + (end - start) / 2;
            long coinsFilled = mid * (mid + 1) / 2;
            if (coinsFilled == n) {
                return (int) mid;
            }
            if (coinsFilled < n) {
                start = mid + 1;
            } else {
                end = mid - 1;
            }
        }
        // Since at this point start > end, start will start pointing to a value greater
        // than the desired result. We will return end as it will point to the correct
        // int value.
        return (int) end;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy