El tema es de LeetCode
Se puede acceder a otras soluciones o código fuente: tongji4m3
descripción
Dada una matriz de enteros no negativos, inicialmente se encuentra en la primera posición de la matriz.
Cada elemento de la matriz representa la longitud máxima que puede saltar en esa posición.
Determina si puedes llegar a la última posición.
Ejemplo 1:
输入: [2,3,1,1,4]
输出: true
解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。
Ejemplo 2:
输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。
Ideas
//伪代码
int i=0;//所处位置
int jump=0;//能跳到的最远位置
while(i<=jump)
{
jump=max(jump,i+nums[i]);//i+nums[i]为通过i位置能跳到的最远处
if(jump>=nums.length-1) return true;
++i;//不断往前走一格
}
return false;
Código
public boolean canJump(int[] nums)
{
int i = 0;//所处位置
int jump = 0;//能跳到的最远位置
while (i <= jump)
{
jump = Math.max(jump, i + nums[i]);//i+nums[i]为通过i位置能跳到的最远处
if (jump >= nums.length - 1) return true;
++i;//不断往前走一格
}
return false;
}
Análisis de complejidad
complejidad del tiempo
O (N) O (N) O ( N ) , solo es necesario atravesar la matriz una vez
Complejidad espacial
O (1) O (1) O ( 1 ) , solo dos índices