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

g1901_2000.s1936_add_minimum_number_of_rungs.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1901_2000.s1936_add_minimum_number_of_rungs;

// #Medium #Array #Greedy #2022_05_15_Time_1_ms_(100.00%)_Space_54_MB_(89.37%)

/**
 * 1936 - Add Minimum Number of Rungs\.
 *
 * Medium
 *
 * You are given a **strictly increasing** integer array `rungs` that represents the **height** of rungs on a ladder. You are currently on the **floor** at height `0`, and you want to reach the last rung.
 *
 * You are also given an integer `dist`. You can only climb to the next highest rung if the distance between where you are currently at (the floor or on a rung) and the next rung is **at most** `dist`. You are able to insert rungs at any positive **integer** height if a rung is not already there.
 *
 * Return _the **minimum** number of rungs that must be added to the ladder in order for you to climb to the last rung._
 *
 * **Example 1:**
 *
 * **Input:** rungs = [1,3,5,10], dist = 2
 *
 * **Output:** 2
 *
 * **Explanation:** 
 *
 * You currently cannot reach the last rung. 
 *
 * Add rungs at heights 7 and 8 to climb this ladder. 
 *
 * The ladder will now have rungs at [1,3,5,7,8,10].
 *
 * **Example 2:**
 *
 * **Input:** rungs = [3,6,8,10], dist = 3
 *
 * **Output:** 0
 *
 * **Explanation:** This ladder can be climbed without adding additional rungs.
 *
 * **Example 3:**
 *
 * **Input:** rungs = [3,4,6,7], dist = 2
 *
 * **Output:** 1
 *
 * **Explanation:** 
 *
 * You currently cannot reach the first rung from the ground. 
 *
 * Add a rung at height 1 to climb this ladder. 
 *
 * The ladder will now have rungs at [1,3,4,6,7].
 *
 * **Constraints:**
 *
 * *   1 <= rungs.length <= 105
 * *   1 <= rungs[i] <= 109
 * *   1 <= dist <= 109
 * *   `rungs` is **strictly increasing**.
**/
public class Solution {
    public int addRungs(int[] rungs, int dist) {
        int addons = 0;
        int currentHeight = 0;
        int i = 0;
        while (i < rungs.length) {
            int nextRung = rungs[i];
            if (nextRung - currentHeight <= dist) {
                currentHeight = nextRung;
                i++;
            } else {
                int adds = (nextRung - currentHeight - 1) / dist;
                addons += adds;
                currentHeight += dist * adds;
            }
        }
        return addons;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy