lintcode会议室

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

第一次作答:

"""
Definition of Interval.
class Interval(object):
    def __init__(self, start, end):
        self.start = start
        self.end = end
"""

class Solution:
    """
    @param intervals: an array of meeting time intervals
    @return: if a person could attend all meetings
    """
    def canAttendMeetings(self, intervals):
        # Write your code here
        if intervals == None or len(intervals) == 0:
            return True
        
        def intervals_start(intervals):
            return intervals.start
        intervals.sort(key = intervals_start)
        for i in range(len(intervals) - 1):
            if  intervals[i + 1].start < intervals[i].end:
                return False
        return True

先对列表排序,再把相邻的元素做对比。例如第一个,若e1 > s2,则返回false。所有相邻的数据对比完后,没有返回false,则返回true

查看九章算法给的答案:
https://www.jiuzhang.com/solution/meeting-rooms/#tag-other-lang-python

class Solution(object):
    def canAttendMeetings(self, intervals):
        """
        :type intervals: List[Interval]
        :rtype: bool
        """
        if len(intervals) == 0:
            return True
        
        intervals = sorted(intervals, key = lambda x: x.start)
        
        end = intervals[0].end
        for i in range(1, len(intervals)):
            if end > intervals[i].start:
                return False
            end = intervals[i].end
        return True

发现了对对多关键字的排序。使用lambda表达式。

更简洁的答案:

class Solution:
    
    def canAttendMeetings(self, intervals) -> bool:
    
        end_time = -1
        for interval in sorted(intervals, key = lambda interval: interval.start):
            if interval.start < end_time:
                return False
            end_time = interval.end 
        return True

将循环与排序放到一起,并且用一个变量记录结束时间,然后循环开始时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值