写在前面:
本周算法课主题内容是贪心算法,这道LeetCode 55正是用贪心算法解决。
题意解读:
给定一个非负整数组,每个位置的整数代表从当前位置可以前进的最大步数。
每次都是从第一个位置出发,请问给定的数组能否到达最后一个位置。
解题思路:
应用贪心算法,从第一个位置开始遍历,计算每一步能够到达的最大步数,如果最后一个位置在这个步数内,则可以到达。
如果在前进的过程中,最大步数等于0,无法前进自然不可到达,返回false。每前进一步,Max都要-1,并对比当前位置i的数值。
如果当前位置i的数值——可前进最大步数大与上一步遗留的最大步数,则更新最大步数。代码如下。
代码:
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
bool canJump(vector<int>& nums) {
int size = nums.size();
if(size <= 0)
return false;
int max = -1;
for(int i = 0; i < size; i++)
{
if(nums[i] > max)
max = nums[i];
if (max + i + 1 >= size)
return true;
if(max == 0)
return false;
max = max - 1;
}
return false;
}
};
运行结果:
算法课第六周探讨了贪心算法,通过LeetCode 55题讲解如何应用。题目要求判断非负整数数组中,是否能从第一个位置到达最后一个位置。解题策略是从起点开始,每次根据当前位置的最大步数前进,若过程中无法前进则返回false。通过不断更新最大步数来判断可达性。

2万+

被折叠的 条评论
为什么被折叠?



