题目:1845. 座位预约管理系统
思路:用优先队列存储空位,时间复杂度为0(nlogn)。
C++版本:
class SeatManager {
public:
priority_queue<int,vector<int>,greater<>> qu;
//先将所有位置加入到优先队列中
SeatManager(int n) {
for(int i=1;i<=n;i++){
qu.push(i);
}
}
int reserve() {
int t=qu.top();
qu.pop();
return t;
}
void unreserve(int seatNumber) {
qu.push(seatNumber);
}
};
/**
* Your SeatManager object will be instantiated and called as such:
* SeatManager* obj = new SeatManager(n);
* int param_1 = obj->reserve();
* obj->unreserve(seatNumber);
*/
优化一下
class SeatManager {
public:
priority_queue<int,vector<int>,greater<>> qu;
//id表示当前已使用过的座位号
int id=0;
SeatManager(int n) {
}
int reserve() {
//如果队列不为空
if(qu.size()){
int t=qu.top();
qu.pop();
return t;
}
//如果当前队列为空,那就返回新的座位号
return ++id;
}
void unreserve(int seatNumber) {
qu.push(seatNumber);
}
};
/**
* Your SeatManager object will be instantiated and called as such:
* SeatManager* obj = new SeatManager(n);
* int param_1 = obj->reserve();
* obj->unreserve(seatNumber);
*/
JAVA版本:
class SeatManager {
private PriorityQueue<Integer> qu =new PriorityQueue<Integer>();
//先将所有位置加入到优先队列中
public SeatManager(int n) {
for(int i=1;i<=n;i++){
qu.add(i);
}
}
public int reserve() {
return qu.poll();
}
public void unreserve(int seatNumber) {
qu.add(seatNumber);
}
}
/**
* Your SeatManager object will be instantiated and called as such:
* SeatManager obj = new SeatManager(n);
* int param_1 = obj.reserve();
* obj.unreserve(seatNumber);
*/
优化一下
class SeatManager {
private PriorityQueue<Integer> qu =new PriorityQueue<Integer>();
//id表示当前已使用过的座位号
private int id=0;
public SeatManager(int n) {
for(int i=1;i<=n;i++){
qu.add(i);
}
}
public int reserve() {
//如果队列不为空
if(qu.size()!=0){
return qu.poll();
}
//如果当前队列为空,那就返回新的座位号
return ++id;
}
public void unreserve(int seatNumber) {
qu.add(seatNumber);
}
}
/**
* Your SeatManager object will be instantiated and called as such:
* SeatManager obj = new SeatManager(n);
* int param_1 = obj.reserve();
* obj.unreserve(seatNumber);
*/