classSolution { public: boolcanJump(vector<int>& nums){ int n = nums.size(); if (n <= 1) returntrue; bool *reach = newbool[n] {false};
reach[0] = true; for (int i = 0; i < n; i++) { if (!reach[i]) continue; for (int k = 1; k <= nums[i]; k++) { if (i + k >= n) break; if (!reach[i + k]) reach[i + k] = true; if (i + k == n - 1) { // 适当剪枝 delete []reach; returntrue; } } }
classSolution { public: boolcanJump(vector<int>& nums){ int n = nums.size(); if (n <= 1) returntrue; int farthest = 0;
for (int i = 0; i < n; i++) { if (i > farthest) returnfalse; farthest = farthest >= i + nums[i] ? farthest : i + nums[i]; if (farthest >= n - 1) break; }