C++, 动态规划
2023年7月12日 12:57
思路
-
f[i]表示从0到下标i的最大跳跃次数; -
f[0]=0,f[i]=f[j]+1, 可以从j跳过来;
class Solution {
public:
int maximumJumps(vector<int>& nums, int target) {
int n = nums.size();
vector<int> f(n, -1);
f[0] = 0;
/* 开始递推 */
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (f[j] != -1 && abs(nums[i] - nums[j]) <= target) {
f[i] = max(f[i], f[j] + 1);
}
}
}
return f[n - 1];
}
};
class Solution:
def maximumJumps(self, nums: List[int], target: int) -> int:
n = len(nums)
f = [-1] * n
f[0] = 0
for j in range(1, n):
for i in range(j):
if f[i] != -1 and abs(nums[i] - nums[j]) <= target:
f[j] = max(f[j], f[i] + 1)
return f[-1]