[LeeCode] 253. Meeting Rooms II (Python) 最小堆

253. Meeting Rooms II

Medium

Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), find the minimum number of conference rooms required.

Example 1:

Input: [[0, 30],[5, 10],[15, 20]]
Output: 2

Example 2:

Input: [[7,10],[2,4]]
Output: 1

NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

 

笔记:

需要重新申请一个新的room的条件是,当前新的任务的开始时间要比最早结束使用的那个room的结束时间早,所以每次只考虑最早结束的使用的那个房间的结束时间是多少。用一个最小堆来维护这个最早结束时间。使用堆的话,push和pop都是log n的效率。

另外一个使用最小堆的题目 Kth Largest Element in an Array

方法1:

class Solution:
    def minMeetingRooms(self, intervals: List[List[int]]) -> int:
        intervals.sort(key=lambda x:x[0])
        heap = []
        for interval in intervals:
            if not heap or heap[0] > interval[0]:
                heapq.heappush(heap, interval[1])
            else:
                heapq.heappushpop(heap, interval[1])
        return len(heap)

如果是使用list来存储当前有哪些房间在使用,每次需要的比较时间是O(n),需要遍历所有的房间判断是否有合适的放假,这样效率就会变低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值