Leetcode T55_canJump

知识点:贪心算法

分析:以nums = [2,3,1,1,4]  为例

              i = [0,1,2,3,4] 表示nums中位置的下标索引

              index = [2,4,3,4,8] 表示由当前位置可跳到的下一个位置,index=i+nums[i]

             jump = 0; 表示当前位置,jump的取值不超过index.size(),同时,jump的位置不应该超高最远的那个距离,即max_index

             max_index = 2; // 表示在jump到达第i个位置的过程中可跳至的最远的位置

视频讲解:https://www.bilibili.com/video/av77339799?from=search&seid=8705609374366775055

C++实现:

class Solution {//贪心算法:贪心原则即每次可以跳至不同的位置,但记录可以跳至的最远的位置
public:
    bool canJump(vector& nums) {
        vectorindex; //定义index表示从当前位置可以调整第i+nums[i]个位置
        for(int i=0;i

这里对jump<=max_index有点不理解,假设没有这个边界条件

nums=[3,2,1,0,4]为例推导下,(应该返回false,即jump取不到4

i = [0,1,2,3,4]

index = [3,3,3,3,8]

jump=0,max_index=3,由于max_index==index[jump],所以max_index不更新,jump++;

jump=1,max_index=3,......

jump=2,max_index=3,......

jump=3,max_index=3,......                                                                                 jump++;

jump=4,max_index=3,(假设没有jump<=max_index这个边界条件,则会进入while循环体,执行jump++,这时候jump可以取4了,显然这是不符合期望的

 

你可能感兴趣的:(C++,LeetCode)