[LeetCode] Jump Game

This problem has a very concise solution in this link, just 4-lines. The code is rewritten below.

1 class Solution {
2 public:
3     bool canJump(vector<int>& nums) {
4         int i = 0, n = nums.size();
5         for (int r = 0; i < n && i <= r; i++)
6             r = max(r, i + nums[i]);
7         return i == n;
8     }
9 };

The above code can be further optimized by avoiding unnecessary checks. Once we are able to reach the last position, we are already done.

1 class Solution {
2 public:
3     bool canJump(vector<int>& nums) {
4         int i = 0, r = 0, n = nums.size();
5         for (; i < n && i <= r && r < n - 1; i++)
6             r = max(r, i + nums[i]);
7         return r >= n - 1;
8     }
9 };

Or we can rewrite the code a bit longer to make the idea obvious.

 1 class Solution {
 2 public:
 3     bool canJump(int A[], int n) {
 4         int start = 0, end = 0;
 5         while(start <= end && end < n - 1) { 
 6             end = max(end, start + A[start]);
 7             start++;
 8         }
 9         return end >= n - 1;
10     }
11 };
原文地址:https://www.cnblogs.com/jcliBlogger/p/4649395.html