贪心算法 安排会议

94 阅读1分钟

题目

一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始的时间和结束的时间(给你一个数组,里面是一个个具体的项目),你来安排宣讲的日程,要求会议室进行的宣讲的场次最多,返回这个最多的宣讲场次。

  • 加入会议室开启时间为7-9点
    • 如果以宣讲开始时间最早进行选择,明显不行
    • 如果以宣讲时间最短选择,假设有三个时间段,7-8,8-9,8.5-8.7,如果按照时间最短选择,应该选择8.5-8.7,但因为这个时间段和其他两个冲突,所以也不行
    • 最优方案:以会议结束时间最短进行安排
//arr内每个为宣讲对象{start:'开始时间',end:'结束时间'}
//meeting:会议开始时间
function tanxin(arr, meetingStart) {
  //按照结束时间最早进行排序
  let arr = arr.sort((a, b) => a - b);

  let res = 0;

  for (let i = 0; i < arr.length; i++) {
    //比较开始时间,因为上一个宣讲的结束时间一定要小于等于之后宣讲的开始时间才行
    if (meetingStart <= arr[i].start) {
      res++;
      meetingStart = arr[i].end;
    }
  }
  return res;
}