会议室, 输入是一个数组, 所有会议的开始和结束时间. 输出一共需要多少个会议室
参数: 二维数组, 例 [[10, 20], [20, 30]],
返回:需要的会议室的个数, 例 1
另一个测试用例: [[10,20], [19,30]] => 2
解法1
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
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
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;
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有