• 1353. 最多可以参加的会议数目(贪心算法)


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

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

    输入:events = [[1,2],[2,3],[3,4]]
    输出:3
    解释:你可以参加所有的三个会议。
    第 1 天参加第一个会议。
    第 2 天参加第二个会议。
    第 3 天参加第三个会议。
    示例 2:

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

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

    思路:为了能参加最多的会议,我们尽量每次参加开始时间最早的会议。 注意以下问题:

    比如某会议时间是 [1,10],那么我们先尽量尝试第 1 天参加,如果参加了别的会议,再尝试第 2 天...
    如果两个会议开始时间相同,我们优先选择结束时间早的那个会议。比如 [1,4] 和 [1,3],利用优先队列,第 1 天先参加 [1,3],第 2 天参加 [1,4]。
    具体实现:
    我们将 events 按照最小优先队列(小顶堆)的结构来储存,当队列不为空时,弹出队首元素,

    1.判断能否参加会议,若结束时间小于当天,说明过期了不能参加,跳过;
    2.如果可以参加,比较当天和开始时间:
      (1)如果当天大于开始时间,说明我们没有必要非在今天参加,把 [当天,结束时间]重新加入优先队列,以查找有没有只能在今天参加的会议;
      (2)如果当天等于开始时间,我们立即开始这个会议。因为优先队列保证开始时间相同时结束时间是递增的。

    class Solution:
        def maxEvents(self, events: List[List[int]]) -> int:
            res = 0
            heapq.heapify(events) # 把events转化成堆结构
            print(events)
            cur = events[0][0]
            while events:
                s, e = heapq.heappop(events)
                # print([s,e])
                if e < cur: # 如果结束时间小于当前天,说明过期了,不能参加
                    continue
                # 如果开始时间小于当天,我们也不必今天参加,可以在(当天,结束天)任何一天参加
                if s < cur: 
                    heapq.heappush(events,[cur,e])
                else:
                    cur = max(cur + 1,s + 1)
                    res += 1
            return res 

    链接:https://leetcode-cn.com/problems/maximum-number-of-events-that-can-be-attended/solution/xiang-jie-you-xian-dui-lie-tan-xin-suan-fa-by-z1m/

  • 相关阅读:
    蒲公英
    大神-YY
    iOS开发精选知识点讲解 - 视频等 iOSStrongDemo是由@李刚维护,总结一些iOS开发精选知识点。每一个知识点都有相应的测试代码,非常适合iOS初学者。
    iOS开发UI篇—懒加载
    iOS开发UI篇—UITableviewcell的性能优化和缓存机制
    iOS开发UI篇—UITableview控件基本使用
    iOS开发UI篇—UITableview控件简单介绍
    iOS — Autolayout之Masonry解读
    iOS开发UI篇—多控制器和导航控制器简单介绍
    iOS开发网络篇—数据缓存
  • 原文地址:https://www.cnblogs.com/USTC-ZCC/p/12928911.html
Copyright © 2020-2023  润新知