leetcode 跳跃游戏 中等

 

 

本来是用数组标记当前位置时候能够达到,然后表示的从后往前标记,如果发现某个点被标记过了,那么前面点也肯定被标记了,就直接 continue。

然后发现,数组根本没有存在的必要,直接优化掉,维护可达到的最远位置即可。

//class Solution {
//public:
//    bool canJump(vector<int>& nums) {
//        vector<bool> tag(nums.size(), false);
//        tag[0] = true;
//        for(int i = 0; i < nums.size(); ++ i) {
//            if(!tag[i]) return false;
//            for(int j = i + nums[i]; j > i; -- j) {
//                if(tag[j]) continue;;
//                tag[j] = true;
//            }
//        }
//        return tag.back();
//    }
//};

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int maxIdx = nums[0];
        for(int i = 1; i < nums.size(); ++ i) {
            if(maxIdx < i) return false;
            maxIdx = max(maxIdx, i + nums[i]);
        }
        return maxIdx >= (int)nums.size() - 1;
    }
};

 

posted @ 2021-08-08 15:45  rookie_Acmer  阅读(25)  评论(0)    收藏  举报