【leetcode】253 Meeting Rooms

输入[[0,31],[5,10],[15,20]]表示每个会议的开始和结束时间,求最少需要多少会议室能够安排所有的会议。

【思路】按照按照开始时间排序,用最小堆保存当前所有会议室的结束时间。

【别人的思路】把开始,结束时间当作两个时间点,结束时间乘以-1,然后按照时间点的绝对值排序,这样就得到了一个时间轴上2n个时间点。正的表示开始时间,负的表示结束时间。设变量count,遍历2n个时间点,遇正+1 遇负-1,count的最大值就是最少需要多少会议室。自己使用php实现代码如下:

<?php

$arr = [[0,31],[5,10],[15,20],[12,16]];
echo meetingRoom($arr); //3


function meetingRoom($arr){
	$tmp = [];
	$size = count($arr);
	for($i=0;$i<$size;$i++){
		array_push($tmp,$arr[$i][0]);//存入开始时间
		array_push($tmp,-$arr[$i][1]); //存入结束时间
	}
	//根据绝对值正向排序
	usort($tmp, cmp);
	//print_r($tmp);
	$count = 0;
	$cur = 0;
	foreach ($tmp as $key => $value) {
		if($value >= 0) {			
			$count++;
			$cur = max($count,$cur);
		}else{
			$count--;
		}
		
	}

	return $cur;

}


//自定义排序规则
function cmp($a,$b){
	if(abs($a) == abs($b)) return 0;
	return abs($a) < abs($b) ? -1 : 1;

}

  

原文地址:https://www.cnblogs.com/oceanL/p/8819133.html