题解 | #合唱队#

合唱队

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 () {
    let n = await readline();
    let datas = await readline();
    datas = datas.split(" ").map((data) => parseInt(data));
    if (datas.length != n || datas.length < 3) return;
    let removeNum = main(datas);
    console.log(removeNum);
})();


// function getIncrean(datas) {
//     let maxNum = getMaxNum(datas);
//     let matrix = [];
//     // 初始化
//     for (let i = 0; i < datas.length; i++) {
//         matrix[i] = [];
//         for (let j = 0; j <= maxNum; j++) {
//             matrix[i][j] = 0;
//         }
//     }
//     // 从左到右 最长递增数列
//     for (let i = 1; i < datas.length; i++) {
//         let num = datas[i - 1];
//         for (let j = 0; j <= maxNum; j++) {
//             if (j < num) {
//                 matrix[i][j] = matrix[i - 1][j];
//             } else {
//                 matrix[i][j] = Math.max(
//                     1 + matrix[i - 1][num !== 0 ? num - 1 : 0],
//                     matrix[i - 1][j]
//                 );
//             }
//         }
//     }
//     return matrix;
// }


function getIncrean(datas) {
    let list = []
    for (let i = 0; i < datas.length; i++) {
        list[i] = 1;
        for (let j = 0; j < i; j++) {
            if( datas[i] > datas[j]){
                list[i] = Math.max(list[i], list[j] + 1)
            }
        }
    }
    return list;
}

function main(datas) {

    let lmatrix = getIncrean(datas);
    // 从右到左, 最长递增数列
    datas.reverse();
    let rmatrix = getIncrean(datas);

    // 计算最长合唱队
    datas.reverse();
    let max = 0;
    for (let i = 2; i < datas.length; i++) {
        const ll = lmatrix[i - 1];
        const rl = rmatrix[datas.length - i]
         let val = ll + rl - 1;
        if (val > max) {
            max = val
        }
    }
    return datas.length - max;
}

function getMaxNum(datas) {
    if (!datas || !datas.length) {
        return;
    }
    let max = datas[0];
    for (let i = 1; i < datas.length; i++) {
        if (max < datas[i]) {
            max = datas[i];
        }
    }
    return max;
}

全部评论

相关推荐

喜欢疯狂星期四的猫头鹰在研究求职打法:短作业优先
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务