Javascript 合唱队
2022/1/23 9:04:25
本文主要是介绍Javascript 合唱队,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
说明:
N 位同学站成一排,音乐老师要请其中的 (N - K) 位同学出列,使得剩下的 K 位同学排成合唱队形。你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。合唱队形即身高从左往右递增,然后递减,只有一个高峰。
输入描述:
有多组用例,每组都包含两行数据,第一行是同学的总数 N ,第二行是 N 位同学的身高,以空格隔开
输出描述:
最少需要几位同学出列
--------------------------------------------------个人笔记-------------------------------------------------
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const arr = [];
rl.on('line', function (line) {
if (line === "") {
rl.close();
} else {
arr.push(line);
}
});
rl.on("close", function() {
const heightStrArr = arr.filter((item, index) => index % 2 === 1);
heightStrArr.forEach(item => {
const heightArr = item.split(" ").map(Number);
const len = heightArr.length;
const leftSerial = [];
const rightSerial = [];
const stuNumberArr = [];
// 从左往右序列化
for(let i = 0; i < len; i++) {
leftSerial[i] = 1; // 是否作为队形的起点 1
for(let j = 0; j < i; j++) {
// 如果高于左边的其他人,符合队形的从左往右最多排到第几
if (heightArr[i] > heightArr[j]) {
leftSerial[i] = Math.max(leftSerial[j] + 1, leftSerial[i]);
}
}
}
// 从右往左序列化
for(let i = len - 1; i >= 0; i--) {
rightSerial[i] = 1;
for(let j = len - 1; j > i; j--) {
if (heightArr[i] > heightArr[j]) {
rightSerial[i] = Math.max(rightSerial[j] + 1, rightSerial[i]);
}
}
}
// 排成合唱队形的同学人数
for(let i = 0; i < len; i++) {
stuNumberArr[i] = leftSerial[i] + rightSerial[i] - 1;
}
// 最多人数的合唱队和最少需要几位同学出列
const maxNumber = Math.max(...stuNumberArr);
const minOffNumber = len - maxNumber;
console.log(minOffNumber);
});
});
这篇关于Javascript 合唱队的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28MQ底层原理资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:新手入门教程
- 2024-11-28MQ项目开发资料详解:入门与初级用户指南
- 2024-11-28MQ消息队列资料入门教程
- 2024-11-28MQ消息队列资料:新手入门详解
- 2024-11-28MQ消息中间件资料详解与应用教程
- 2024-11-28MQ消息中间件资料入门教程
- 2024-11-28MQ源码资料详解与入门教程
- 2024-11-28MQ源码资料入门教程
- 2024-11-28RocketMQ底层原理资料详解