Leetcode 253:Meeting Rooms II(超詳細的解法!!!)

coordinate_blog發表於2019-06-24

Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), find the minimum number of conference rooms required.

For example,

Given [[0, 30],[5, 10],[15, 20]],
return 2.

解題思路

這個問題有一個非常簡單的處理思路,我們可以先將上述的區間在座標軸上畫好,然後通過垂直於x軸的線從左向右移動,移動的過程中,記錄這根線和區間相交的最大交點個數,這個最大交點個數就是相交的最大區間個數。

Leetcode 253:Meeting Rooms II(超詳細的解法!!!)

演算法的實現上我們有一個trick,我們遍歷intervals中的每一項it,然後對於左邊的座標用[it[0], 1]表示(表示我們進入一個線段),右邊的座標用[it[1], -1]表示(表示我們退出了一個線段),然後將這些新得到的區間加入到一個tmp陣列中,對這個陣列排序,接著遍歷這個陣列,遍歷的過程中累加我們建立的標記位(也就是前面建立的1-1)記錄累加的最大值即可。

class Solution:
    def minMeetingRooms(self, intervals):
        if not intervals:
            return 0
        tmp = sorted(x for i, j in intervals for x in [[i, 1], [j, -1]])
        res, n = 0, 0
        for i, v in tmp:
            n += v
            res = max(res, n)
        return res

我將該問題的其他語言版本新增到了我的GitHub Leetcode

如有問題,希望大家指出!!!

相關文章