编辑代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  const seatNum = Number(await readline());
  const seatOrLeave = (await readline()).split(" ").map(Number);
  // 记录已经坐人的位置的编号
  let seatIdx = [];
  let lastSeatIdx = -1;
  for (let info of seatOrLeave) {
    // 如果小于0,说明有人离开
    if (info < 0) {
      seatIdx = seatIdx.filter((idx) => idx !== -info);
      continue;
    }
    // 如果为1,说明有人进场
    // 如果seatIdx.length==seatNum 说明坐满了
    if (seatIdx.length == seatNum) {
      lastSeatIdx = -1;
      continue;
    }
    //如果没人坐,就坐第0号
    if (seatIdx.length == 0) {
      seatIdx.push(0);
      lastSeatIdx = 0;
    } else if (seatIdx.length == 1) {
      // 如果只有两个人,一个坐头一个坐尾
      seatIdx.push(seatNum - 1);
      lastSeatIdx = seatNum - 1;
    } else {
      // 记录最大社交距离的座位号
      let bestSeatIdx = -1;
      // 记录最大的社交距离
      let bestSeatDis = -1;
      // 左边界
      let left = seatIdx[0];
      for (let i = 1; i < seatIdx.length; i++) {
        let right = seatIdx[i];
        // 最大长度 = 右边界-左边界-1
        let dis = right - left - 1;
        if (dis > 0) {
          const curSeatDis = Math.floor(dis / 2) - (dis % 2 == 0 ? 1 : 0);
          const curSeatIdx = left + curSeatDis + 1;
          if (curSeatDis > bestSeatDis) {
            bestSeatDis = curSeatDis;
            bestSeatIdx = curSeatIdx;
          }
        }
        left = right;
      }
      // 如果最后一个位置没人 1 0 0 1 0 0 0
      if (seatIdx[seatIdx.length - 1] !== seatNum - 1) {
        const curSeatDis = seatNum - 1 - left;
        const curSeatIdx = seatNum - 1;
        if (curSeatDis > bestSeatDis) bestSeatIdx = curSeatIdx;
      }
      if (bestSeatIdx > 0) {
        seatIdx.push(bestSeatIdx);
        seatIdx.sort((a, b) => a - b);
      }
      lastSeatIdx = bestSeatIdx;
    }
  }
  console.log(lastSeatIdx);
})();