题解 | #Redraiment的走法#
Redraiment的走法
https://www.nowcoder.com/practice/24e6243b9f0446b081b1d6d32f2aa3aa
const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); let row = 0 // 保存长度 let len = 0 rl.on('line', function (line) { row++ if(row === 1){ len = Number(line) }else { // 梅花桩高度 const heights = line.split(' ').map(Number) // 最大步数 let len = heights.length // 开始遍历 // dp[i] 表示以第 i 个桩为结尾,最多走多少步,初始是 1 步(默认这个桩是跟它之前相比最矮的) let dp = new Array(len).fill(1); for(let i = 0; i < len; i++){ // 以第一层循环的梅花桩为结束点 for(let j = 0; j < i; j++){ // 则以i为结尾的步数,等于以i之前所有比i低的桩为结尾的步数 + 1,(它们的的最大值) // 比如 以 j = 2 结尾的 是2步, 以 j = 3 结尾的 是3步 则 以i 为结尾的就是 3 + 1了 if(heights[i] > heights[j]){ dp[i] = Math.max(dp[i], dp[j] + 1) } } } console.log(Math.max(...dp)) } });