会议室

#富途一面算法题#

ps:leetcode需要开通会员,才能刷这道题目。

一、题目描述

  给一个会议时间安排的数组intervals,每个会议室包含开始时间和结束时间,即intervals[i] = [starti, endi],为避免会议冲突,同时要考虑充分利用会议室资源,至少需要多少间会议室,才能满足这里会议安排。

二、示例

用例1

输入:intervals = [[0,30], [5, 10], [15,20]]

输出:2

用例2

输入:intervals = [[7,10], [2,4]]

输出:1

三、解题思路

  这道题可以转化为上下公交车问题一样,每个人上车的时间不同,即开始时间,在下车的时间也不同,即结束时间,求得在车上最多人数。

  这道题可以用暴力算法,但面试官眉头一皱。所以这道题目需要用最优解法,即贪心算法。可以转化为坐标形式,通过垂直于x轴从左向右移动,移动过程中,记录这根线与区间的最大交点个数,即相交的最大区间个数。

四、代码实现

 1  1 var minMeeting = function(intervals) {
 2  2   const nums = [];
 3  3   // 存放数据,上车+1,下车-1
 4  4   for(let [up, down] of intervals) {
 5  5     nums.push([up, 1]);
 6  6     nums.push([down, -1]);
 7  7   }
 8  8   // 排序:首先按时间,时间相同的,先下车,后上车
 9  9   nums.sort((a, b) => a[0] === b[0] ? a[1] - b[1] : a[0] - b[0]);
10 10   // 遍历数组,找到最大的相交点
11 11   let res = 0;
12 12   let curValue = 0
13 13   for(let [value, flag] of nums) {
14 14     curValue += flag;
15 15     res = Math.max(res, curValue);
16 16   }
17 17   return res;
18 18 } 
posted on 2023-05-17 15:09  大黑ylx  阅读(80)  评论(0编辑  收藏  举报