第一行输入一个整数
代表同学数量。
第二行输入
个整数
代表每一位同学的身高。
输出一个整数,代表最少需要出列的同学数量。
8 186 186 150 200 160 130 197 200
4
在这个样例中,有且仅有两种出列方式,剩下的同学分别为
和
。
const N = readline() const hArr = readline().trim().split(' ').map(i => +i) const left = [] const right = [] for (let i = 0; i < N; i++) { left[i] = right[i] = 1 } for (let i = 1; i < N; i++) { let max = left[i] for (let j = i - 1; j >= 0; j--) { if (hArr[j] < hArr[i]) { max = Math.max(max, left[j] + left[i]) } } left[i] = max } for (let i = N - 2; i >= 0; i--) { let max = right[i] for (let j = i + 1; j < N; j++) { if (hArr[j] < hArr[i]) { max = Math.max(max, right[j] + right[i]) } } right[i] = max } var res = left.reduce((res, l, i) => { return Math.max(res, left[i] + right[i] - 1) }, 0) print(N - res)
readline(); let input = readline(); let a = input.split(' ').map(x => parseInt(x)); function c(a) { //p[i]:i元素左边的最大递增序列长度 //q[i]:i元素右边的最大递减序列长度 let p = [0], q = []; q[a.length - 1] = 0; for (let i = 1; i < a.length; i++) { let max = -1; //第i个元素的p值等于 {k| k<i&&a[k]<a[i]}的最大p值+1 for (let j = 0; j < i; j++) { if (a[i] > a[j] && max < p[j]) { max = p[j]; } } p[i] = max + 1; } for (let i = a.length - 2; i >= 0; i--) { let max = -1; //第i个元素的q值等于 {k| k>i&&a[k]<a[i]}的最大q值+1 for (let j = a.length - 1; j > i; j--) { if (a[i] > a[j] && max < q[j]) { max = q[j]; } } q[i] = max + 1; } //剩余最大人数 let max = 0; for (let i = 0; i < a.length; i++) { max = Math.max(p[i] + q[i] + 1, max); } //最小出列人数 return (a.length - max); } console.log(c(a));