【leetcode】1229.Meeting Scheduler


題目如下:

你是一名行政助理,手里有兩位客戶的空閑時間表:slots1 和 slots2,以及會議的預計持續時間 duration,請你為他們安排合適的會議時間。

「會議時間」是兩位客戶都有空參加,並且持續時間能夠滿足預計時間 duration 的 最早的時間間隔。

如果沒有滿足要求的會議時間,就請返回一個 空數組。

「空閑時間」的格式是 [start, end],由開始時間 start 和結束時間 end 組成,表示從 start 開始,到 end 結束。

題目保證數據有效:同一個人的空閑時間不會出現交疊的情況,也就是說,對於同一個人的兩個空閑時間 [start1, end1] 和 [start2, end2],要么 start1 > end2,要么 start2 > end1。

解題思路:首先對slots1和slots2分別按start排好序。接下來分別從slots1和slots2中取第一個元素,判斷兩個元素是否滿足會議,如果不滿足,則從end較小的元素對應的slots中取后一個元素。以此類推,直到找出符合條件的slot為止。

代碼如下:

class Solution(object):
    def minAvailableDuration(self, slots1, slots2, duration):
        """
        :type slots1: List[List[int]]
        :type slots2: List[List[int]]
        :type duration: int
        :rtype: List[int]
        """
        def cmpf(v1,v2):
            return v1[0] - v2[0]
        slots1.sort(cmp=cmpf)
        slots2.sort(cmp=cmpf)
        inx1 = inx2 = 0
        while inx1 < len(slots1) and inx2 < len(slots2):
            item1 = slots1[inx1]
            item2 = slots2[inx2]
            if item1[0] > item2[1]:
                inx2 += 1
            elif item1[1] < item2[0]:
                inx1 += 1
            else:
                ms = max(item1[0],item2[0])
                me = min(item1[1],item2[1])
                if me - ms >= duration:
                    return [ms,ms+duration]
                if item1[1] < item2[1]:
                    inx1 += 1
                else:
                    inx2 += 1
        return []
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM