LeetCode&Python 920.会议室 & 919.会议室 2

920.会议室

描述

给定一系列的会议时间间隔,包括起始和结束时间[[s1,e1],[s2,e2],…(si < ei),确定一个人是否可以参加所有会议。

Example

样例1

输入: intervals = [(0,30),(5,10),(15,20)]

输出: false

解释:

(0,30), (5,10) 和 (0,30),(15,20) 这两对会议会冲突

样例2

输入: intervals = [(5,8),(9,15)]

输出: true

解释:

这两个时间段不会冲突


class Solution:

    def canAttendMeetings(self, intervals):

        intervals.sort(key = lambda x: x.start)

        for i in range(1,len(intervals)):

            if intervals[i].start < intervals[i-1].end:

                return False

        return True

思路就是排序之后再比较是否有重叠区间。


919.会议室 2


给定一系列的会议时间间隔intervals,包括起始和结束时间[[s1,e1],[s2,e2],...] (si < ei),找到所需的最小的会议室数量。

Example

样例1

输入: intervals = [(0,30),(5,10),(15,20)]

输出: 2

解释:

需要两个会议室

会议室1:(0,30)

会议室2:(5,10),(15,20)

样例2

输入: intervals = [(2,7)]

输出: 1

解释:

只需要1个会议室就够了


这道题运用了扫描线的思路,将起始时间和结束时间在x轴上标记,然后计数,遇到起始时间就+1(打开一个会议室),遇到结束时间就-1(关闭一个会议室),取这个过程中的最大值,则是需要的最小会议室数。

"""

Definition of Interval.

class Interval(object):

    def __init__(self, start, end):

        self.start = start

        self.end = end

"""

class Solution:

    def minMeetingRooms(self, intervals):

        # Write your code here

        start = []

        end = []

        for i in intervals:

            start.append(i.start)

            end.append(i.end)


        start.sort()

        end.sort()


        a , b = 0 , 0

        min_room = 0

        count_room = 0

        while a < len(start):

            if start[a] < end[b]:

                count_room += 1

                a += 1

                min_room = max(min_room , count_room)

            else:

                count_room -= 1

                b += 1

        return min_room

你可能感兴趣的:(LeetCode&Python 920.会议室 & 919.会议室 2)