Min Cost Climbing Stairs
Easy C++Enunciado do problema
Em uma escada, o i-ésimo degrau tem algum custo de valor não negativo [i] atribuído (0 indexado).
Depois de pagar o custo, você pode subir um ou dois degraus. Você precisa encontrar o mínimo custo para chegar ao topo do andar, e você pode começar a partir do degrau com o índice 0 ou com o índice 1.
Solução
Para resolver este problema, vamos usar a programação dinâmica. Para cada índice no array os valores mais importantes são i-2 e i-1 porque eles representam o custo imediato que eu preciso pagar para que eu possa chegar ao meu índice real. Desde que eu quero minimizar o custo, eu escolherei o valor mínimo entre o meu custo real e um dos custos anteriores que tornam possível chegar à minha posição atual. Manter um controle desses valores com um vetor possibilita encontrar uma resposta.
int minCostClimbingStairs(vector<int>& cost) {
cost.push_back(0);
vector<int> dp(cost.size(),0);
dp[0]=cost[0],dp[1]=cost[1];
for(int i=2;i<dp.size();i++){
dp[i]=cost[i]+min(dp[i-1],dp[i-2]);
}
return dp.back();
}
Complexidade de tempo: O(n)
Complexidade de espaço: O(n)
question from LeetCode