題目如下:
你是一名行政助理,手里有兩位客戶的空閑時間表: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 []
