논리 설명: 회의 스케줄러 - 우선 순위 대기열을 사용하는 Leetcode [Java]
3993 단어 leetcodedatastructurecodingjava
설명
intervals
i intervals[i] = [start
i , end
인 회의 시간 배열 ]
이 주어지면 필요한 최소 회의실 수를 반환합니다.예 1
Input: intervals = [[0,30],[5,10],[15,20]]
Output: 2
예 2
Input: intervals = [[7,10],[2,4]]
Output: 1
예 3:
Input: intervals = [[0,30],[5,10],[10,15],[15,20],[30,50],[30,70]]
Output: 2
대본
오늘, 다른 팀의 동료가 회의 시작 시간과 회의 종료 시간 목록을 제공했습니다. 회의를 위해 새 회의실을 설정하는 것은 번거롭기 때문에 이전 회의에서 확보한 회의실을 다시 사용하고 싶을 것입니다. 당신은 얼마나 많은 방이 사용될 것인지 알아내야 합니다.
논리
데이터 구조: 우선순위 큐
의사 코드
intervals
배열을 시작 시간의 오름차순으로 정렬합니다. 두 번째 매개변수에서 Comparator
와 함께 Arrays.sort()를 사용하십시오. PriorityQueue
데이터 구조를 사용합니다. 왜 우선순위 큐인가? 대기열의 헤드를 확인할 때 대기열의 헤드에서 가장 빠른 종료 시간을 확인할 수 있습니다. 이렇게 하면 방을 재사용할 수 있는지 확인하는 것이 효율적입니다. ㅏ. i번째 간격 배열의 시작 시간이 대기열 헤드의 종료 시간
queue.peek()
보다 크거나 같은지 확인한 다음 대기열 헤드의 종료 시간queue.poll()
을 제거합니다.비. i번째 정렬된 간격 배열의 종료 시간을 추가합니다.
queue.offer()
. 참고: 우선 순위 대기열에서는 자연 순서에 따라 대기열 인덱스에 새 요소를 삽입합니다. 시나리오
시나리오 1: 대기열에서 가장 빠른 종료 시간은 새 회의 시작 시간보다 크거나 같지 않습니다.
시나리오 2: 대기열에서 가장 빠른 종료 시간이 새 회의 시작 시간보다 크거나 같습니다.
암호
Solution leetcode에서 사용자 이름: titasdatta93
Time Complexity: O(nlogn) Space Complexity: O(n)
class Solution {
public int minMeetingRooms(int[][] intervals) {
//First sort the intervals in asc. order of starting time
//TC: Of the below step : O(nlogn)
Arrays.sort(
intervals,
(Comparator<int[]>) (o1, o2) -> (o1[0] - o2[0])
);
//Create priority queue to store ending times of each interval
PriorityQueue<Integer> queue = new PriorityQueue<>();
//Add the ending time of first sorted interval
queue.offer(intervals[0][1]);
for(int i=1; i<intervals.length; i++) {
if(intervals[i][0] >= queue.peek()) {
queue.poll(); //Poll from min heap happens in O(n) time
}
queue.offer(intervals[i][1]);
} //hence total time complexity here is O(logn)
return queue.size();
}
}
Reference
이 문제에 관하여(논리 설명: 회의 스케줄러 - 우선 순위 대기열을 사용하는 Leetcode [Java]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/clarkngo/logic-explained-meeting-room-ii-leetcode-java-1gh5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)