[路飞]_leetcode-1353-最多可以参加的会议数目

154 阅读1分钟

题目描述

[题目地址]

给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。

你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意,一天只能参加一个会议。

请你返回你可以参加的 最大 会议数目。

示例 1:

输入: events = [[1,2],[2,3],[3,4]]
输出: 3
解释: 你可以参加所有的三个会议。
安排会议的一种方案如上图。
第 1 天参加第一个会议。
第 2 天参加第二个会议。
第 3 天参加第三个会议。

示例 2:

输入: events= [[1,2],[2,3],[3,4],[1,2]]
输出: 4

提示: ​​​​​​

  • 1 <= events.length <= 105
  • events[i].length == 2
  • 1 <= startDayi <= endDayi <= 105

解题思路

对会议按照结束时间降序排序,如果结束时间相同,则按开始时间升序排序
如果我前一天的时间和结束时间的会议等于我后一天起始和结束时间的会议 证明我这个会议我前一天参加或者后一天参加都可以,就算成一个

var maxEvents = function(events) {
    let set = new Set();
    events.sort((a,b)=> a[1] - b[1] );
    let falg = true;
    for(let i = 1; i < events.length; i++){
        // 如果我前一天的时间和结束时间的会议等于我后一天起始和结束时间的会议
        // 证明我这个会议我前一天参加或者后一天参加都可以,就算成一个
        if(events[i][1] == events[i -1][1]){
            falg = false;
            break;
        }
    }
    if(falg == true){
        return events.length;
    }
    // 判断set有没有重复元素
    for(let event of events){
        for(let i = event[0]; i <= event[1];i++){
            if(!set.has(i)){
                set.add(i);
                break;
            }
        }
    }
    // 最后获取参加会议最大数量
    return set.size;
};

至此我们就完成了leetcode-1353-最多可以参加的会议数目