以示例1为例,从位置0开始,可以跳到位置1,2.假设我们选择跳到位置1的话,从位置1可以跳到位置2,3,4,。而我们选择跳到位置2的话,从位置2可以跳到位置3.
可以看出位置2能跳到的位置 包含于 位置1能跳到的位置,所以我们从位置0开始跳的话,选择的将要跳的那个位置(1or2)是一个能跳到更远的位置,因为位置2能跳到的位置,位置1也能跳到,而位置1能跳的位置,位置2却跳不到。贪心思想体现在这里。
class Solution { public: bool canJump(vector<int>& nums) { vector<int> index;//保存每个位置可以到达的最远下标位置 for(int i =0;i<nums.size();++i) index.push_back(i+nums[i]); int jump = 0;//代表当前位置 int max_jump = index[0];//代表能到的最远位置 //当前位置还在这个下标数组(index)内,并且不超过能到达的最远位置 while(jump< index.size() && jump<=max_jump ) { if(index[jump] > max_jump) max_jump = index[jump]; jump++; } if(jump == index.size() ) return true; return false; } };