数据结构与算法之贪心: LeetCode 55. 跳跃游戏 (Ts版)
跳跃游戏
- https://leetcode.cn/problems/jump-game/description/
描述
-
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度
-
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false
示例 1
输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标
示例 2
输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
提示
- 1 <= nums.length <= 1 0 4 10^4 104
- 0 <= nums[i] <= 1 0 5 10^5 105
Typescript 版算法实现
1 ) 方案1:贪心
function canJump(nums: number[]): boolean {
const n = nums.length;
let rightmost = 0;
for (let i = 0; i < n; ++i) {
if (i <= rightmost) {
rightmost = Math.max(rightmost, i + nums[i]);
if (rightmost >= n - 1) {
return true;
}
}
}
return false;
}
2 ) 方案2: 贪心优化
function canJump(nums: number[]): boolean {
// 跳跃的范围
let cover = 0 //cover比num.length-1大
for (let i = 0; i <= cover; i++) {
cover = Math.max(cover, i + nums[i])
if (cover >= nums.length - 1) {
return true
}
}
return false
};