Tuyên bố vấn đề
Với thời gian đến và đi của tất cả các chuyến tàu đến một nhà ga, nhiệm vụ là tìm số lượng sân ga tối thiểu cần thiết cho nhà ga để không có chuyến tàu nào phải chờ đợi.
Chúng tôi được cung cấp hai mảng đại diện cho thời gian đến và đi của các chuyến tàu dừng lại.
Đối với đầu vào dưới đây, chúng tôi cần ít nhất 3 nền tảng -
Đào tạo | Giờ đến | Giờ khởi hành |
---|---|---|
Train-1 | 09:00 | 09:15 |
Train-2 | 09:35 | 11:45 |
Train-3 | 09:40 | 11:05 |
Train-4 | 11:00 | 12:00 |
Train-5 | 14:30 | 18:15 |
Train-6 | 18:00 | 19:00 |
Thuật toán
1. Sort arrival and departure time arrays in ascending order 2. Trace the number of trains at any time keeping track of trains that haves arrived, but not departed
Ví dụ
#include <iostream> #include <algorithm> #define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) using namespace std; int getPlatformCount(int *arrival, int *departure, int n){ sort(arrival, arrival + n); sort(departure, departure + n); int platformCnt = 1; int result = 1; int i = 1; int j = 0; while (i < n && j < n) { if (arrival[i] <= departure[j]) { ++platformCnt; ++i; if (platformCnt > result) { result = platformCnt; } } else { --platformCnt; ++j; } } return result; } int main() { int arrival[] = {900, 935, 940, 1100, 1430, 1800}; int departure[] = {915, 1145, 1105, 1200, 1815, 1900}; cout << "Minimum required platforms = " << getPlatformCount(arrival, departure, SIZE(arrival)) << endl; return 0; }
Đầu ra
Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau -
Minimum required platforms = 3