贪心算法 LeetCode55跳跃游戏
分享自己在LeetCode上的解题心得(打个卡)
题目链接
解题思路
就是单步贪,举个例子假设可以从0位置跳到1,2位置,而在1位置,又可以跳到5位置,在2位置可以跳到9位置,那么在最初的0位置就选择跳到2位置上,因为位置2可以跳到更远的9处,所以先求出index数组,index数组的意思是在每一个位置上最远可以跳到的位置(求法 nums[i]+i)。接下来设jump(当前位置) 和 max_index(在这个遍历过程中,最远可以跳到的位置),如果你最远可以跳到的位置(max_index)< 当前位置(jump而当前位置又没有到最后一个位置),说明已经跳不到了。
以下见代码
class Solution {
public:
bool canJump(vector<int>& nums) {
std::vector<int> index; //最远可跳至的位置
for (int i=0;i<nums.size();i++){
index.push_back(nums[i] + i);
}
int jump = 0;
int max_index = index[0];
while (jump < index.size() && jump <= max_index){
if (max_index < index[jump]){
max_index = index[jump];
}
jump++;
}
if (jump == nums.size())
return true;
return false;
}
};