タイトル
非負整数配列を考えると、あなたは最初に、配列の最初の位置にあります。
配列の各要素は、あなたがその位置にジャンプすることができた最大の長さを表しています。
あなたが最終位置に到達することができるかどうかを判断するには。
例1:
入力:[2,3,1,1,4]
出力:真の
説明:我々は、ステップ3 1からジャンプし、位置1に位置0から、最初のステップをジャンプする最後の位置の位置に到達することができます。
例2:
入力:[3,2,1,0,4]
出力:偽
の説明:いずれかの方法で、あなたは常に3のインデックスに到達します。しかし、ジャンプ位置の最大の長さは0であるので、あなたは最終的な位置に達することはできません。
出典:ボタン(LeetCode)滞在
:リンクhttps://leetcode-cn.com/problems/jump-game
すべてのネットワークからの控除が著作権を保有します。商業転載は許可公式、非商用の転載は、ソースを明記してくださいお問い合わせください。
問題の解決策
実際には、
要素の後にジャンプ場合、その要素にジャンプすることができるようになります。我々は最後の要素の後ろにジャンプする場合は特に、最後の要素にジャンプすることができるようになります。
フロントは最も遠い地点に到達することができた場合は、現在の、そして現在のポイント未満であり、以下の点が到達可能ではありません。したがって、我々は、現在のポイントを繰り返す<最大電流がジャンプすることができる最大距離を更新し、これまで説明し、距離をジャンプすることができる=;現在の点があれば>電流が最大距離、偽直接リターンへジャンプすることができ。
そのため、我々は最後まで行くので、もし、最後の点が含まれている利便性、トゥーレが返されます。- 私の意見では、ほとんどのリモートまで、現在の貪欲の維持に、他の比較とそれを使用しています。
Oの時間複雑度(N)
コード
class Solution {
public boolean canJump(int[] nums) {
int maxDisIdx = 0;
for (int i = 0; i < nums.length; ++i) {
if (i > maxDisIdx) {
return false;
}
maxDisIdx = Math.max(maxDisIdx, i + nums[i]);
}
return true;
}
}