LeetCode 회의실 II

회의실 II
회의 시간 을 정 한 배열 은 모든 회의 시간 에 시작 과 끝 시간 [s1, e1], [s2, e2],...] (si < ei) 을 포함 하고 회의 충돌 을 피하 기 위해 회의실 자원 을 충분히 이용 하 는 것 을 고려 해 야 합 니 다. 적어도 몇 개의 회의실 이 필요 한 지 계산 해 보 세 요.
예시 1:
  : [[0, 30],[5, 10],[15, 20]]
  : 2

예시 2:
  : [[7,10],[2,4]]
  : 1

이 문 제 는 상하 차 문제 와 약간 유사 하 다.이 문 제 는 시간 충돌 에 대한 해결 방안 을 기획 한 것 이다.제목 에 따 르 면 우 리 는 이 회의 가 지속 되 는 시간 에 신경 쓸 필요 가 없다 는 것 을 알 게 되 었 다.회의 시간 이 정 해 져 있 기 때문에 회의실 과 회의 종료 시간 만 주시 하면 된다.회의 시간 이 끝나 야 다음 회 의 를 진행 할 수 있 기 때문이다.그렇지 않 으 면 새로운 회의실 을 열 어 회 의 를 진행 해 야 한다.회의 비용 과 시간 효율 을 최 우선 으로 하기 위해 다음 회의 가 들 어 오 는 방 은 회의실 종료 시간 과 이 회의 시작 시간의 차이 에 따라 시간 차 가 적 을 수록 회의 가 빈 틈 없 이 연결 되 기 때문에 효율 이 높다.
class Solution {
     
    public int minMeetingRooms(int[][] intervals) {
     
        if(intervals == null || intervals.length ==0)
            return 0;
        //         ,       (         )
        Arrays.sort(intervals,new Comparator<>(){
     
			@Override
			public int compare(int[] o1, int[] o2) {
     
				return o1[0]-o2[0];
			}
        });
        //     HashMap           
        Map<Integer,Integer> RoomTime = new HashMap<>();
        //               ,             ,            
        RoomTime.put(1,intervals[0][1]);
        //         ,     forEach       ,             
        boolean isFirst = false;
        for(int[] item :intervals){
     
            if(!isFirst)
            {
     
                //        ,       
                isFirst = !isFirst;
                continue;
            }
            //    
            int fix = 0;
            //    ,         
            int tempRoom = 0;
            //        
            for(Map.Entry<Integer,Integer> entry: RoomTime.entrySet()){
     
                //          
                if(entry.getValue() <= item[0])
                {
     
                    //             
                    if(fix == 0 || item[0] - entry.getValue() <= fix)
                    {
     
                        fix = item[0] - entry.getValue();
                        tempRoom = entry.getKey();
                    }
                }
            }
            //         0,        。  ,          ,          ,     
            if(tempRoom != 0)
                RoomTime.put(tempRoom, item[1]);
            else
                RoomTime.put(RoomTime.size() + 1,item[1]);
        }
        //          ,       
        return RoomTime.size();
    }
}

좋은 웹페이지 즐겨찾기