leetcode 会议室2 与 会议室1

会议室1

描述

给定一系列的会议时间间隔,包括起始和结束时间[[s1,e1],[s2,e2],…(si < ei),确定一个人是否可以参加所有会议。

(0,8),(8,10)在8这一时刻不冲突

样例

样例1

输入: intervals = [(0,30),(5,10),(15,20)]
输出: false
解释:
(0,30), (5,10) 和 (0,30),(15,20) 这两对会议会冲突

样例2

输入: intervals = [(5,8),(9,15)]
输出: true
解释:
这两个时间段不会冲突
复制代码
/**
 * Definition of Interval:
 * public classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this.start = start;
 *         this.end = end;
 *     }
 * }
 */

public class Solution {
    /**
     * @param intervals: an array of meeting time intervals
     * @return: if a person could attend all meetings
     */
    public boolean canAttendMeetings(List<Interval> intervals) {
        // Write your code here
       if(intervals.isEmpty() || intervals.size()==0) return true;
       //按照end升序排序
       Collections.sort(intervals, (a,b)->(a.end - b.end));
       
       int end = intervals.get(0).end;
       for(int i = 1; i < intervals.size(); i++){
           int start = intervals.get(i).start;
           if(start >= end){
               end = intervals.get(i).end;
               continue;
           }else{
               return false;
           }
       }
       return true;
    }
}
复制代码
 
会议室2
描述

给定一系列的会议时间间隔intervals,包括起始和结束时间[[s1,e1],[s2,e2],...] (si < ei),找到所需的最小的会议室数量。

(0,8),(8,10)在8这一时刻不冲突

样例

样例1

输入: intervals = [(0,30),(5,10),(15,20)]
输出: 2
解释:
需要两个会议室
会议室1:(0,30)
会议室2:(5,10),(15,20)

样例2

输入: intervals = [(2,7)]
输出: 1
解释:
只需要1个会议室就够了

 


 [labuladong的题解网站](https://labuladong.gitee.io/algo/3/28/100/)



复制代码
/**
 * Definition of Interval:
 * public classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this.start = start;
 *         this.end = end;
 *     }
 * }
 */

public class Solution {
    /**
     * @param intervals: an array of meeting time intervals
     * @return: the minimum number of conference rooms required
     */
    public int minMeetingRooms(List<Interval> intervals) {
        // Write your code here

       int[] begin = new int[intervals.size()];
       int[] end = new int[intervals.size()];
       int n = intervals.size();
       int i = 0;
       int j = 0;
       for(Interval node : intervals){
           begin[i++] = node.start;
           end[j++] = node.end;
       }
       Arrays.sort(begin); 
       Arrays.sort(end);
    //    Collections.sort(intervals,());
       int count =0;
       int result =0;
       i =0;
       j = 0;
       
       while(i<n && j<n){
           if(begin[i] < end[j]){
               count++;//扫描到一个红点 count++;
               i++;
           }else{
               count--; //扫描到一个绿点  count--;
               j++;
           }
           result = Math.max(count,result);
       }
       return result;
       
    }
}
复制代码

 

 

posted @   zhongweiLeex  阅读(248)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示