这道题只需要两个最基础的容器:一个队列负责排队,一个**集合(哈希表)**负责判重。
四个方法怎么实现:
食堂新开了一个打包窗口,同学先在取号机上取号,窗口按取号先后依次叫号出餐。同一个号不能被取两次,免得有人重复排队。取到的号要能查还有多少人在等。
请实现类 PickupDesk:
PickupDesk():构造一个空的取餐台,没有任何号在等待。返回 null。order(ticketId):取一个号为 ticketId 的号。
falsetrueserve():叫号出餐,把队首的号叫走并返回该号。
-1waiting():返回当前还在等待的号数每行一次调用,首行必须是 PickupDesk()。累计调用不超过 10000 次。
约束:
每次调用输出一行:
nullorder 返回 true 或 falseserve / waiting 返回整数输入:
PickupDesk()
order(101)
order(102)
waiting()
serve()
serve()
serve()
waiting()
输出:
null
true
true
2
101
102
-1
0
说明:
101 先取号所以在前面serve() 按先后叫出 101、102-1输入:
PickupDesk()
order(7)
order(7)
waiting()
serve()
order(7)
waiting()
输出:
null
true
false
1
7
true
1
说明:第二次 order(7) 失败,因为号 7 还在等待;叫走之后同一个号可以重新取。
输入:
PickupDesk()
serve()
waiting()
order(5)
serve()
serve()
输出:
null
-1
0
true
5
-1
说明:一开始没人等待,serve() 返回 -1;取号 5 后立刻被叫走,之后队列又为空。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册