题解 | #合唱队#

合唱队

https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4

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

//正序和逆序分别来一次最长递增子序列,然后相加减一
void (async function () {
    //输入数据
    const n = parseInt(await readline());
    const nums = (await readline()).split(" ").map(Number);
    // 最长递增子序列
    const dp1 = new Array(n).fill(1);
    for (let i = 1; i < n; i++) {
        for (let j = 0; j < i; j++) {
            if (nums[i] > nums[j]) dp1[i] = Math.max(dp1[i], dp1[j] + 1);
        }
    }
    // 最长递减子序列
    const dp2 = new Array(n).fill(1);
    for (let i = n - 2; i >= 0; i--) {
        for (let j = n - 1; j >= i; j--) {
            if (nums[i] > nums[j]) dp2[i] = Math.max(dp2[i], dp2[j] + 1);
        }
    }
    // 计算结果
    let res = n;
    for(let i = 0; i < n; i++){
        res = Math.min(res,n-dp1[i]-dp2[i]+1);
    }
    console.log(res);
})();

全部评论

相关推荐

07-16 14:10
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:00
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务