Lectura

Costo mínimo para subir escaleras (Java, Python, PHP, C++, JavaScript)

El ejercicio consiste en encontrar el costo mínimo de subir una escalera con n escalones, donde cada escalón tiene un costo asociado. Se puede subir uno o dos escalones a la vez, y el objetivo es llegar al último escalón con el menor costo posible.

1 0 100 1 30 2 1 3 1 4 100 5 total=32

En el ejemplo se puede apreciar que dada una escalera con costos asociados, uno puede subir uno o dos escalones.

Entre el primer y segundo escalón (1 y 100 respectivamente), el costo más bajo es el primero, de valor uno, entonces se sube un escalón.

Explicación del ejercicio Paso por paso

Código de la solución

Java

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int n = cost.length;
        int prev2 = cost[0];
        int prev1 = cost[1];

        for (int i = 2; i < n; i++) {
            int current = cost[i] + Math.min(prev1, prev2);
            prev2 = prev1;
            prev1 = current;
        }

        return Math.min(prev1, prev2);
    }
}

Python

class Solution(object):
    def minCostClimbingStairs(self, cost):
        prev2 = cost[0]
        prev1 = cost[1]

        for i in range(2, len(cost)):
            current = cost[i] + min(prev1, prev2)
            prev2 = prev1
            prev1 = current

        return min(prev1, prev2)

PHP

class Solution {

    /**
     * @param Integer[] $cost
     * @return Integer
     */
    function minCostClimbingStairs($cost) {
        $n = count($cost);
        $prev2 = $cost[0];
        $prev1 = $cost[1];

        for ($i = 2; $i < $n; $i++) {
            $current = $cost[$i] + min($prev1, $prev2);
            $prev2 = $prev1;
            $prev1 = $current;
        }

        return min($prev1, $prev2);
    }
}

C++

class Solution {
public:
    int minCostClimbingStairs(vector& cost) {
        int n = cost.size();
        int prev2 = cost[0];
        int prev1 = cost[1];

        for (int i = 2; i < n; i++) {
            int current = cost[i] + min(prev1, prev2);
            prev2 = prev1;
            prev1 = current;
        }

        return min(prev1, prev2);
    }
};

JavaScript

/**
 * @param {number[]} cost
 * @return {number}
 */
var minCostClimbingStairs = function(cost) {
    let prev2 = cost[0];
    let prev1 = cost[1];

    for (let i = 2; i < cost.length; i++) {
        let current = cost[i] + Math.min(prev1, prev2);
        prev2 = prev1;
        prev1 = current;
    }

    return Math.min(prev1, prev2);
};

Si te gustó el contenido, ¡visita mi canal de YouTube para ver más explicaciones sobre algoritmos y estructuras de datos!