题解 | #合唱队#
合唱队
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); })();