Skip to content

动态规划 - 达到最终值的最长行动步数

javascript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
let nums = [1, 3, 6, 4, 1, 2];
let target = 2;
// dp[i]表示跳到该索引对应元素所需的最大次数
let n = nums.length;
let dp = new Array(n).fill(0);
dp[0] = 0;
let set = new Set();
set.add(0);
// if(Math.abs(nums[1]-nums[0])<=2){
//     dp[1]=dp[0]+1
// }
for (let i = 1; i < n; i++) {
    // console.log("i=",i)
    let max = 0;
    for (let j = 0; j < i; j++) {
        if (Math.abs(nums[i] - nums[j]) <= target && set.has(j)) {
            set.add(i);
            max = Math.max(max, dp[j] + 1);
        }
    }
    dp[i] = max;
}
console.log(dp);
console.log(set);
typescript
   let nums = [1,3,6,4,1,2]
   let target = 2
   // dp[i]表示跳到该索引对应元素所需的最大次数
    let n = nums.length
    let dp = new Array(n).fill(0)

    dp[0] = 0
    let set=new Set()
    set.add(0)

    // if(Math.abs(nums[1]-nums[0])<=2){
    //     dp[1]=dp[0]+1
    // }
    for (let i = 1; i < n; i++) {
       // console.log("i=",i)
        let max = 0
        for (let j = 0; j < i; j++) {
            if (Math.abs(nums[i] - nums[j]) <= target && set.has(j)) {
                set.add(i)
                max = Math.max(max, dp[j]+1)
            }
        }
        dp[i]=max
    }
   console.log(dp)
   console.log(set)

源码地址