More content:LeetCode hot100@贪心
55. 跳跃游戏❌
一开始想的是跳向最大长度之间中下标最大的,发现不行
不要拘泥于跳到哪,而是能跳到哪,即关注能跳到的范围
贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围)
整体最优解:最后得到整体最大覆盖范围,看是否能到终点
class Solution {
public:
bool canJump(vector<int>& nums) {
int dest = nums.size() - 1;
//看跳跃覆盖范围可不可以覆盖到终点
int cover = 0;
for(int i = 0; i <= dest; i++) {
if(cover < i) return false; //遇到0跳不到,中断了
for(int j = 1; j <= nums[i] && j + i <= dest; j++) {
cover = max(cover, i + j + nums[i+j]);
}
if(cover >= dest) return true;
}
return false;
}
};