(LeetCode) 1845. 座位预约管理系统 (优先队列)

题目: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);
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值