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

