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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容