摘要:排序法復雜度時間空間思路這題和很像,我們按開始時間把這些都給排序后,就挨個檢查是否有沖突就行了。有沖突的定義是開始時間小于之前最晚的結束時間。這里之前最晚的結束時間不一定是上一個的結束時間,所以我們更新的時候要取最大值。
Meeting Rooms
排序法 復雜度Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), determine if a person could attend all meetings.
For example, Given [[0, 30],[5, 10],[15, 20]], return false.
時間 O(NlogN) 空間 O(1)
思路這題和Merge Intervals很像,我們按開始時間把這些Interval都給排序后,就挨個檢查是否有沖突就行了。有沖突的定義是開始時間小于之前最晚的結束時間。這里之前最晚的結束時間不一定是上一個的結束時間,所以我們更新的時候要取最大值。
代碼public class Solution { public boolean canAttendMeetings(Interval[] intervals) { if(intervals == null || intervals.length == 0) return true; Arrays.sort(intervals, new ComparatorMeeting Rooms II(){ public int compare(Interval i1, Interval i2){ return i1.start - i2.start; } }); int end = intervals[0].end; // 檢查每一個Interval for(int i = 1; i < intervals.length; i++){ // 如果Interval的開始時間小于之前最晚的結束時間,就返回假 if(intervals[i].start < end) return false; end = Math.max(end, intervals[i].end); } return true; } }
貪心法 復雜度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.
時間 O(NlogN) 空間 O(1)
思路這題的思路和Rearrange array to certain distance很像,我們要用貪心法,即從第一個時間段開始,選擇下一個最近不沖突的時間段,再選擇下一個最近不沖突的時間段,直到沒有更多。然后如果有剩余時間段,開始為第二個房間安排,選擇最早的時間段,再選擇下一個最近不沖突的時間段,直到沒有更多,如果還有剩余時間段,則開辟第三個房間,以此類推。這里的技巧是我們不一定要遍歷這么多遍,我們實際上可以一次遍歷的時候就記錄下,比如第一個時間段我們放入房間1,然后第二個時間段,如果和房間1的結束時間不沖突,就放入房間1,否則開辟一個房間2。然后第三個時間段,如果和房間1或者房間2的結束時間不沖突,就放入房間1或者2,否則開辟一個房間3,依次類推,最后統計開辟了多少房間。對于每個房間,我們只要記錄其結束時間就行了,這里我們查找不沖突房間時,只要找結束時間最早的那個房間。
這里還有一個技巧,如果我們把這些房間當作List來管理,每次查詢需要O(N)時間,如果我們用堆來管理,可以用logN時間找到時間最早結束的房間。
public class Solution { public int minMeetingRooms(Interval[] intervals) { if(intervals == null || intervals.length == 0) return 0; Arrays.sort(intervals, new Comparator(){ public int compare(Interval i1, Interval i2){ return i1.start - i2.start; } }); // 用堆來管理房間的結束時間 PriorityQueue endTimes = new PriorityQueue (); endTimes.offer(intervals[0].end); for(int i = 1; i < intervals.length; i++){ // 如果當前時間段的開始時間大于最早結束的時間,則可以更新這個最早的結束時間為當前時間段的結束時間,如果小于的話,就加入一個新的結束時間,表示新的房間 if(intervals[i].start >= endTimes.peek()){ endTimes.poll(); } endTimes.offer(intervals[i].end); } // 有多少結束時間就有多少房間 return endTimes.size(); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64705.html
Problem 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. Example 1: Input: [[0, 30],[5,...
Problem Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), determine if a person could attend all meetings. Example Given intervals = [[0,30],[...
摘要:思路這道題就是要找區間之間是否有。而的復雜度是,所以最后總的復雜度為。思路的條件依然是不同的是這題需要求房間數。還是先,指向之前有的最小的那一個。接著的是,比小,所以又放入。。的是,比大,因此出,放入。。 Meeting Rooms Given an array of meeting time intervals consisting of start and end times [[...
摘要:廣度優先搜索復雜度時間空間思路實際上就是找每個房間到最近的門的距離,我們從每個門開始,廣度優先搜索并記錄層數就行了。這題要注意剪枝,如果下一步是門或者下一步是墻或者下一步已經訪問過了,就不要加入隊列中。 Walls and Gates You are given a m x n 2D grid initialized with these three possible values....
摘要:為了盡量保證右邊的點向左走,左邊的點向右走,那我們就應該去這些點中間的點作為交點。由于是曼哈頓距離,我們可以分開計算橫坐標和縱坐標,結果是一樣的。 Best Meeting Point A group of two or more people wants to meet and minimize the total travel distance. You are given a ...
閱讀 3559·2021-11-22 15:11
閱讀 4634·2021-11-18 13:15
閱讀 2702·2019-08-29 14:08
閱讀 3576·2019-08-26 13:49
閱讀 3091·2019-08-26 12:17
閱讀 3288·2019-08-26 11:54
閱讀 3111·2019-08-26 10:58
閱讀 2031·2019-08-26 10:21