|
| 1 | +#include <vector> |
| 2 | +#include <climits> // Para usar INT_MIN |
| 3 | + |
| 4 | +class Solution { |
| 5 | +public: |
| 6 | + int ans = 0; // Variável para armazenar o número de saltos |
| 7 | + |
| 8 | + // Função principal que calcula o número mínimo de saltos |
| 9 | + int jump(std::vector<int>& nums) { |
| 10 | + int i = 0; // Começa no primeiro índice |
| 11 | + // Continua até alcançar o penúltimo índice |
| 12 | + while (i < nums.size() - 1) { |
| 13 | + i = helper(i, nums[i], nums); // Chama a função auxiliar para determinar o próximo salto |
| 14 | + } |
| 15 | + return ans; // Retorna o número total de saltos |
| 16 | + } |
| 17 | + |
| 18 | + // Função auxiliar que encontra o melhor índice para pular |
| 19 | + int helper(int a, int b, std::vector<int>& nums) { |
| 20 | + ans++; // Incrementa o contador de saltos |
| 21 | + // Se o salto atual pode alcançar ou ultrapassar o último índice, terminamos |
| 22 | + if (a + b >= nums.size() - 1) { |
| 23 | + return nums.size(); // Retorna o tamanho do array para indicar que alcançamos o final |
| 24 | + } |
| 25 | + |
| 26 | + int max = INT_MIN; // Variável para armazenar o valor máximo possível de alcance |
| 27 | + int temp = 0; // Variável para armazenar o índice do próximo salto |
| 28 | + // Itera sobre todos os índices possíveis de alcance do salto atual |
| 29 | + for (int i = a; i <= a + b; i++) { |
| 30 | + // Verifica se o índice atual permite alcançar uma posição mais distante |
| 31 | + if (nums[i] + i >= max) { |
| 32 | + temp = i; // Atualiza o índice do próximo salto |
| 33 | + max = nums[i] + i; // Atualiza o valor máximo de alcance |
| 34 | + } |
| 35 | + } |
| 36 | + return temp; // Retorna o índice do próximo salto |
| 37 | + } |
| 38 | +}; |
0 commit comments