leetcode 跳躍遊戲 中等
阿新 • • 發佈:2021-08-08
本來是用陣列標記當前位置時候能夠達到,然後表示的從後往前標記,如果發現某個點被標記過了,那麼前面點也肯定被標記了,就直接 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; } };