LeetCode—253.会議室II(Meeting Rooms II)——分析とコード(C++)


LeetCode—253.会議室II[Meeting Rooms II]——分析及びコード[C+]
  • 一、テーマ
  • 二、分析及びコード
  • 1. 立ち上がり時間はそれぞれ
  • となる.
  • (1)考え方
  • (2)コード
  • (3)結果
  • 三、その他
  • 一、テーマ
    会議のスケジュールの配列を指定すると、各会議時間には開始と終了の時間[[s 1,e 1],[s 2,e 2],...](si例1:
      : [[0, 30],[5, 10],[15, 20]]
      : 2
    

    例2:
      : [[7,10],[2,4]]
      : 1
    

    ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/meeting-rooms-ii著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
    二、分析及びコード
    1.起止時間別ソート
    (1)考え方
    すべての会議の開始時間と終了時間をそれぞれ記録してソートする2つのベクトルを設計し、現在の会議室数と空き会議室数を2つの整数でそれぞれ記録します.開始時間を巡り、順次処理:1)終了時間<現在の開始時間、空き会議室数++があり、ポインタは次の終了時間を指す.2)空き会議室数=0、会議室数++;3)空き会議室数!=0,空き会議室数-;ソート後の配列は必ずi番目の開始時間(2)コード
    class Solution {
    public:
        int minMeetingRooms(vector<vector<int>>& intervals) {
            if (intervals.empty())
                return 0;
            vector<int> begin_time(intervals.size());//          
            vector<int> end_time(intervals.size());//         
            for (int i = 0; i < intervals.size(); i++) {
                begin_time[i] = intervals[i][0];
                end_time[i] = intervals[i][1];
            }
            sort(begin_time.begin(), begin_time.end());
            sort(end_time.begin(), end_time.end());
            int room = 0, free_room = 0, endnum = 0;//     ,       ,        
            for (int i = 0; i < intervals.size(); i++) {
                int time = begin_time[i];
                while (endnum < intervals.size() && end_time[endnum] < time + 1) {//             
                    endnum++;
                    free_room++;
                }
                if (free_room > 0)//      ,  1      
                    free_room--;
                else//      ,     
                    room++;
            }
            return room;
        }
    };
    

    (3)結果
    実行時間:20 ms、すべてのC++コミットで91.94%のユーザーを破った.メモリ消費量:12 MBで、すべてのC++コミットで100.00%のユーザーを破った.
    三、その他
    しばらくありません.