题解 | #主持人调度(二)#

主持人调度(二)

https://www.nowcoder.com/practice/4edf6e6d01554870a12f218c94e8a299

/** 思路1 1 通过 sort 方法对数组进行从小到大排序 2 查找目前区间的头元素是否在当前一个区间外,是的话更新当前区间 3 否的话,主持人人数 + 1, 并重置当前人数 */

function minmumNumberOfHost(n, startEnd) {
  if (n <= 1) return n;
  // write code here
  const arr = startEnd.sort((a, b) => {
    if (a[0] !== b[0]) return a[0] - b[0];
    return a[1] - b[1];
  });

  let res = 1;
  let pre = arr.shift();

  while (arr.length > 0) {
    const targetIndex = arr.findIndex((item) => item[0] >= pre[1]);
    if (targetIndex < 0) {
      pre = arr.shift();
      res++;
    } else {
      pre = arr[targetIndex];
      arr.splice(targetIndex, 1); // 删除
    }
  }

  return res;
}

/** * 思路2 隐形条件: start 必然小于等于 end 通过隐形条件可知, 只要当前区间的start >= end 则不需要换主持人 👉 [start1, end1] [start2, end2] 只有当当前区间的 start < end 需要更换支持人

因此我们可以通过先对开始区间和结束区间进行排序 在根据当前区间的开始时间和上一个区间的结束时间做判断 */

function minmumNumberOfHost2(n, startEnd) {
  if (n <= 1) return n;
  // write code here
  const start = startEnd.map((item) => item[0]).sort((a, b) => a - b);
  const end = startEnd.map((item) => item[1]).sort((a, b) => a - b);
  let res = 0;
  let j = 0;
  for (let i = 0; i < n; i++) {
    if (start[i] >= end[j]) {
      j++;
    } else {
      res++;
    }
  }

  return res;
}

全部评论

相关推荐

仁者伍敌:实习生要工作经验,工作要实习经验
点赞 评论 收藏
分享
哈哈哈哈哈哈哈哈哈哈这个世界太美好了
凉风落木楚山秋:毕业出路老师不管,你盖个章他好交差就完事了,等你盖完毕业了就不关他事情了
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务