🏃♂️
[leetCode] Top Interview 150: Jump Game
リンク
概要
- 各マスごとに、進める最大値を記した配列
nums
が与えられる- たとえば
3
なら、 1, 2, 3 マスのいずれか進むことができる
- たとえば
- 最終マスにたどり着くことが可能かどうかを真偽値で返す
解法
線形探索法で書くことができる。
各マスから飛ぶことができる最大値を変数reachable
に保存し、これがnums.length^1
= 最終マスを超えていればtrue
を返すようにする。また、どう頑張っても配列内の0
のマスに落ち着いてしまうテストケースも考えられるため、reachable
がこれ以上更新できない(i > reachable
)ときはfalse
を返すようにする。
計算量は
class Solution {
public boolean canJump(int[] nums) {
int reachable = 0;
for(int i=0; i<nums.length; i++) {
if(reachable > nums.length-1) return true;
if(i > reachable) return false;
reachable = Math.max(reachable, i+nums[i]);
}
return true;
}
}
Discussion