【中等】算法nodeJs:Redraiment的走法

18 阅读1分钟

描述

Redraiment 是走梅花桩的高手。现在,地上有 n 个梅花桩排成一排,从前到后高度依次为 h1​,h2​,…,hn​。
Redraiment 可以任选一个梅花桩开始,向后跳到任意一个比当前高度高的梅花桩上。
求 Redraiment 最多可以跳过多少个梅花桩。

输入描述:

第一行输入一个整数 n(1≦n≦200) 代表梅花桩的数量。
第二行输入 n 个整数 h1​,h2​,…,hn​(1≦hi​≦350) 代表每一个梅花桩的高度。

输出描述:

输出一个正整数,代表 Redraiment 最多可以跳过多少个梅花桩。

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    let n = 0;
    let arr = [];
    while ((line = await readline())) {
        if (n === 0) {
            n = parseInt(line);
        } else {
            arr = line.split(" ").map(Number);
            // 初始化dp数组--以i结尾的的最长递增子序列长度,初始值为1
            let dp = Array(arr.length).fill(1);
            let res = 1;
            for (let i = 1; i < arr.length; i++) {
                for (j = 0; j < i; j++) {
                    if (arr[i] > arr[j]) {
                        dp[i] = Math.max(dp[i], dp[j] + 1);
                    }
                }
                res = Math.max(res, dp[i]);
            }
            console.log(res);
        }
    }
})();