blob: bd1c874fbd86880f162b73471c0932f638e7bf89 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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);
}
|