zoukankan      html  css  js  c++  java
  • [LeetCode] Meeting Rooms II

    Problem Description:

    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.


    The idea is to group those non-overlapping meetings in the same room and then count how many rooms we need. You may refer to this link.

    The code is as follows.

     1 class Solution {
     2 public:
     3     int minMeetingRooms(vector<Interval>& intervals) {
     4         sort(intervals.begin(), intervals.end(), compare);
     5         vector<vector<Interval>> rooms;
     6         int n = intervals.size();
     7         for (int i = 0; i < n; i++) {
     8             int idx = findNonOverlapping(rooms, intervals[i]);
     9             if (rooms.empty() || idx == -1)
    10                 rooms.push_back({intervals[i]});
    11             else rooms[idx].push_back(intervals[i]);
    12         }
    13         return (int)rooms.size();
    14     }
    15 private:
    16     static bool compare(Interval& interval1, Interval& interval2) {
    17         return interval1.start < interval2.start;
    18     }
    19     int findNonOverlapping(vector<vector<Interval>>& rooms, Interval& interval) {
    20         int n = rooms.size();
    21         for (int i = 0; i < n; i++)
    22             if (interval.start >= rooms[i].back().end)
    23                 return i;
    24         return -1;
    25     }
    26 };

    Update: for each group of non-overlapping intervals, we just need to store the last added one instead of the full list. So we could use a vector<Interval> instead of vector<vector<Interval>> in C++. The code is now as follows.

     1 class Solution { 
     2 public:
     3     int minMeetingRooms(vector<Interval>& intervals) {
     4         sort(intervals.begin(), intervals.end(), compare);
     5         vector<Interval> rooms;
     6         int n = intervals.size();
     7         for (int i = 0; i < n; i++) {
     8             int idx = findNonOverlapping(rooms, intervals[i]);
     9             if (rooms.empty() || idx == -1)
    10                 rooms.push_back(intervals[i]);
    11             else rooms[idx] = intervals[i];
    12         }
    13         return (int)rooms.size();
    14     } 
    15 private:
    16     static bool compare(Interval& interval1, Interval& interval2) {
    17         return interval1.start < interval2.start;
    18     }
    19     int findNonOverlapping(vector<Interval>& rooms, Interval& interval) {
    20         int n = rooms.size();
    21         for (int i = 0; i < n; i++)
    22             if (interval.start >= rooms[i].end)
    23                 return i;
    24         return -1;
    25     }
    26 };
  • 相关阅读:
    [POJ1743]Musical Theme
    ubuntu qq
    Separate code and data contexts: an architectural approach to virtual text sharing
    Python3发送post请求,自动记住cookie
    python 异步协程
    豆瓣爬虫
    pandas 使用
    房天下爬虫
    计算英文文章词频的两种方法
    LOW版统计词频
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4713099.html
Copyright © 2011-2022 走看看