논리 설명: 회의 스케줄러 - 우선 순위 대기열을 사용하는 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.)