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

133 阅读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

解题:并查集

class UnionFind {
    constructor(n){
      this.list = new Array(n).fill(0).map((v, index) => index);
    }
    find(index){
      if(this.list[index]===index) return index
      this.list[index] = this.find(this.list[index])
      return this.list[index]
    }
    merge(index1,index2){
      const rootA = this.find(index1),
      rootB = this.find(index2)
      this.list[rootA] = rootB
    }
  }
var maxEvents = function (events) {
    events.sort((a,b)=>a[1]===b[1]?a[0]-b[0]:a[1]-b[1])
    const uf=new UnionFind(events[events.length-1][1]+1)
    let result=0
    for (let i = 0; i < events.length; i++) {
        const [start,end] = events[i];
        const day=uf.find(start)
        console.log(uf.list)
        if(day<=end) uf.merge(day,day+1),result++
        
    }
    return result
};