贪心:力扣253. 会议室 II

1、题目描述:

贪心:力扣253. 会议室 II_第1张图片

2、题解:

方法1:排序后找同一时间的最大会议数
思路:

会议开始和结束时间放到一个数组里,开始对应1,结束对应-1,其实是元组放进数组。
排序
设置一个累加数cur,遍历数组进行累加开始和结束出现对应的+1-1,找最大的cur

遇到开始时间就+1,遇到结束时间就-1
class Solution:
    def minMeetingRooms(self, intervals: List[List[int]]) -> int:
        events = [(i[0],1) for i in intervals] + [(i[1],-1) for i in intervals]
        events.sort()
        res,cur = 0,0
        for _,e in events:
            cur += e
            res = max(res,cur)
        return res

方法2:贪心
思路:

把会议的开始时间和结束时间放到两个数组中,然后排序。
遍历:如果开始时间小于结束时间,就让room+1,开始时间指针右移;否则,就让room-1,结束时间指针右移
返回room即可
class Solution:
    def minMeetingRooms(self, intervals: List[List[int]]) -> int:
        #贪心
        if not intervals: return 0
        used_rooms = 0
        start_time = sorted([i[0] for i in intervals])
        end_time = sorted([i[1] for i in intervals])
        n = len(intervals)
        start_pointer ,end_pointer = 0,0
        while start_pointer < n:
            if start_time[start_pointer] >= end_time[end_pointer]:
                used_rooms -= 1
                end_pointer += 1
            used_rooms += 1
            start_pointer += 1
        return used_rooms

3、复杂度分析:

方法1:
时间复杂度:O(NlogN)
空间复杂度:O(N)
方法2:
时间复杂度:O(NlogN)
空间复杂度:O(N)

你可能感兴趣的:(LeetCode高频面试题)