zoukankan      html  css  js  c++  java
  • 【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;
    
    }
    

      

  • 相关阅读:
    Oracle删除用户和表空间
    PLSQL配置教程
    Oracle 11g client 安装
    oracle 11g 安装
    oracle创建用户空间、导出、导入dmp备份文件方法
    c#关键字
    c#运算符重载
    每天一个Linux命令之date
    linux之2>&1
    每天一个Linux命令之crontab
  • 原文地址:https://www.cnblogs.com/oceanL/p/8819133.html
Copyright © 2011-2022 走看看