質問リンク:https://leetcode-cn.com/problems/jump-game/
タイトル説明:
問題解決のアイデア:
位置iの要素の場合、ジャンプできる最も遠い位置はi + nums [i]です。要素の最も遠い位置が配列の最後の位置を超えてジャンプする場合、trueを返します。
つまり、配列要素を順番にトラバースし、リアルタイムで最も遠い位置を維持します。現在トラバースされている要素の場合、要素が最も遠い位置にある場合は、要素が到達可能であることを意味します。
コード:
/**
* @param {number[]} nums
* @return {boolean}
*/
var canJump = function(nums) {
if (nums.length == 1) {
return true;
}
let maxStep;
maxStep = nums[0];
for (let i = 1; i < nums.length; i++) {
if (maxStep >= nums.length - 1) {
return true;
}
if (i <= maxStep && i + nums[i] > maxStep) {
maxStep = i + nums[i];
}
}
return false;
};
時間の複雑さ:O(n)
スペースの複雑さ:O(1)