aboutsummaryrefslogtreecommitdiff
path: root/seat_reservation_manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'seat_reservation_manager.c')
-rw-r--r--seat_reservation_manager.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/seat_reservation_manager.c b/seat_reservation_manager.c
new file mode 100644
index 0000000..bd1c874
--- /dev/null
+++ b/seat_reservation_manager.c
@@ -0,0 +1,66 @@
+// 1845. Seat Reservation Manager
+#include "leetcode.h"
+
+/*
+ * design a system that manages the reservation state of 'n' seats that are
+ * numbered 1 to 'n'. implement the 'SeatManager' class
+ * - seatManagerCreate(int n) initalises a SeatManager object that will manage
+ * 'n' seats numbered from 1 to 'n'. all seats are initially available
+ * - seatManagerReserve() fetches the smallest-numbered unreserved seat,
+ * reserves it, and returns its number
+ * - seatManagerUnreserve(int seat_num) unreserves the seat with the given
+ * 'seat_num'
+ */
+
+typedef struct {
+ int *un_array;
+ int un_size;
+ int curr;
+} SeatManager;
+
+SeatManager *seatManagerCreate(int n) {
+ SeatManager *res = malloc(sizeof(SeatManager));
+ res->un_size = 0;
+ res->curr = 0;
+ res->un_array = (int *)malloc(n * sizeof(int));
+ return res;
+}
+
+int seatManagerReserve(SeatManager *obj) {
+ if (!obj->un_size) {
+ obj->curr++;
+ return obj->curr;
+ } else {
+ int min = obj->un_array[0], min_id = 0;
+ for (int i = 1; i < obj->un_size; i++)
+ if (obj->un_array[i] < min) {
+ min = obj->un_array[i];
+ min_id = i;
+ }
+ int tmp = obj->un_array[min_id];
+ obj->un_array[min_id] = obj->un_array[obj->un_size - 1];
+ return tmp;
+ }
+}
+
+void seatManagerUnreserve(SeatManager *obj, int seat_num) {
+ obj->un_size++;
+ obj->un_array[obj->un_size - 1] = seat_num;
+}
+
+void seatManagerFree(SeatManager *obj) {
+ free(obj->un_array);
+ free(obj);
+}
+
+int main() {
+ SeatManager *obj = seatManagerCreate(5);
+ printf("%d\n", seatManagerReserve(obj)); // expect: 1
+ printf("%d\n", seatManagerReserve(obj)); // expect: 2
+ seatManagerUnreserve(obj, 2);
+ printf("%d\n", seatManagerReserve(obj)); // expect: 2
+ printf("%d\n", seatManagerReserve(obj)); // expect: 3
+ printf("%d\n", seatManagerReserve(obj)); // expect: 4
+ printf("%d\n", seatManagerReserve(obj)); // expect: 5
+ seatManagerUnreserve(obj, 5);
+}