前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >会议室, 输入是一个数组, 所有会议的开始和结束时间. 输出一共需要多少个会议室

会议室, 输入是一个数组, 所有会议的开始和结束时间. 输出一共需要多少个会议室

作者头像
刘嘿哈
发布2022-10-25 14:16:33
5620
发布2022-10-25 14:16:33
举报
文章被收录于专栏:js笔记
代码语言:javascript
复制
  会议室, 输入是一个数组, 所有会议的开始和结束时间. 输出一共需要多少个会议室
 参数: 二维数组, 例 [[10, 20], [20, 30]],
  返回:需要的会议室的个数, 例 1
  另一个测试用例: [[10,20], [19,30]] => 2

解法1

代码语言:javascript
复制
var x = meetings => {
    // 会议按开始时间排序    
    if (meetings == null || meetings.length == 0) return 0;
    meetings.sort((x, y) => x[0] - y[0])
    // 获取当前会议的结束时间
    var meetingEnd = meetings[0][1];
    // 数组第一个元素存在,说明会议室已经占用一个
    var room = 1;
    // 依次查看每个会议的开始时间,是否在前面结束最早的会议结束后开始,
    // 如果来的及就不需要再开一间会议室,但是要更新最早结束的会议时间
    // 如果前面的会议室在本次会议开始时都未结束,那么开一个会议室,并且更新最早结束的会议室时间
    for (var i = 1; i < meetings.length; i++) {
        if (meetingEnd <= meetings[i][0]) {
            meetingEnd = Math.min(meetingEnd, meetings[i][1])
        } else {
            room++;
            meetingEnd = Math.min(meetingEnd, meetings[i][1])
        }
    }
    // 最少的房间数 
    return room;
}

方案2

代码语言:javascript
复制
var z=meetings => {
    //TODO your code goes here...
    if (meetings == null || meetings.length == 0) return 0;
    var start = [];
    var end = [];
    for (var i = 0; i < meetings.length; i++) {
        start[i] = meetings[i][0];
        end[i] = meetings[i][1];
    }
    start.sort((a, b) => a - b);
    end.sort((a, b) => a - b);
        // 有几个在开始之前结束的,就可以少开几间房
    var finish = 0
    for(var i=0;i<end.length;i++){
        if(end[finish]<=start[i]){
            finish++
        }  
    }
  
    return end.length-finish; 
  } 

方案3

代码语言:javascript
复制
var x=meetings => {
   //TODO your code goes here...
   if (meetings == null || meetings.length == 0) return 0;
   var start = [];
   var end = [];
   for (var i = 0; i < meetings.length; i++) {
       start[i] = meetings[i][0];
       end[i] = meetings[i][1];
   }
   start.sort((a, b) => a - b);
   end.sort((a, b) => a - b);

   var rooms = 0
   var activeMeeting = 0;
   var i = 0
   var j = 0;
   while (i < meetings.length && j < meetings.length) {
       if (start[i] < end[j]) {
           activeMeeting++;
           i++;
       } else {
           activeMeeting--;
           j++;
       }
       rooms = Math.max(rooms, activeMeeting);
   }
   return rooms;
 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档