LeetCode - Jump Game

xiaoxiao2021-03-01  58

解法一: DP

dp[i]代表走到i position后最多可以继续可以走到的position。

dp[i] = max(dp[i-1], i+nums[i]);

如果dp[i-1]>=i, 继续遍历。反之,return false。

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

解法二:Greedy

class Solution { public: bool canJump(vector<int>& nums) { int n = nums.size(), reach = 0; for (int i = 0; i < n; ++i) { if (i > reach || reach >= n - 1) break; reach = max(reach, i + nums[i]); } return reach >= n - 1; } };
转载请注明原文地址: https://www.6miu.com/read-4200322.html

最新回复(0)