PU Meeting Rooms II

Jan 01, 1970

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.

C Solution:

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 * };
 */
void quick_sort(int *nums, int len) {
    if (len < 2) return;
    int key = nums[len - 1];
    int i;
    for (i = 0; i < len - 1 && nums[i] < key; i++);
    if (i == len - 1) {
        quick_sort(nums, len - 1);
        return;
    }
    int j;
    for (j = i + 1; j < len - 1; j++) {
        if (nums[j] < key) {
            int tmp = nums[j];
            nums[j] = nums[i];
            nums[i++] = tmp;
        }
    }
    nums[len - 1] = nums[i];
    nums[i] = key;
    quick_sort(nums, i);
    quick_sort(nums + i + 1, len - i - 1);
}
int minMeetingRooms(struct Interval* intervals, int intervalsSize) {
    int *start = malloc(intervalsSize * sizeof(int));
    int *end = malloc(intervalsSize * sizeof(int));
    int i;
    for (i = 0; i < intervalsSize; i++) {
        start[i] = intervals[i].start;
        end[i] = intervals[i].end;
    }
    quick_sort(start, intervalsSize);
    quick_sort(end, intervalsSize);
    int room = 0, j = 0;
    for (i = 0; i < intervalsSize; i++) {
        if (start[i] < end[j]) room++;
        else j++;
    }
    return room;
}

Heap Solution:


Summary:

  1. Greedy. I am not sure I understand it throughly.
  2. This problem can be solved with heap, but that's not necessary.
  3. Heap solution:
    1. sort the intevals by start.
    2. build a heap of ends.
    3. loop through starts, compare with the minimum end, maintain heap.
  4. This problem is not a good practice for heap.
  5. 9ms, 66.67%

LeetCode: 253. Meeting Rooms II