ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Javascript 合唱队

2022-01-23 04:00:39  阅读:183  来源: 互联网

标签:同学 const 合唱队 rightSerial Javascript len heightArr leftSerial


说明:

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);
  });
});

标签:同学,const,合唱队,rightSerial,Javascript,len,heightArr,leftSerial
来源: https://www.cnblogs.com/ran2022/p/15835646.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有