A restaurant gives numbered tokens to customers while their orders are being prepared.
The tokens are numbered from 0 to tokenCount - 1. An issued token cannot be given to another customer until it is returned.
Design a system that issues tokens, checks their availability, and accepts returned tokens.
RestaurantTokenCounter
RestaurantTokenCounter(int tokenCount)
tokenCount: The total number of customer tokens.Initially, every token is available.
int issueToken()
Issue the smallest available token number and mark that token as unavailable.
Return the issued token number. Return -1 if no token is available.
boolean isTokenAvailable(int tokenNumber)
tokenNumber: The token number to check.Return true if the token is available. Otherwise, return false.
void returnToken(int tokenNumber)
tokenNumber: The token number being returned.Make the specified token available again. If it is already available, this operation has no effect.
issueToken always issues the smallest available token number.1 ≤ tokenCount ≤ 10,0000 ≤ tokenNumber < tokenCount20,000 calls will be made to issueToken, isTokenAvailable, and returnToken in total. RestaurantTokenCounter counter = new RestaurantTokenCounter(tokenCount = 4)
counter.issueToken() returns 0, the smallest available token.
counter.issueToken() returns 1.
counter.isTokenAvailable(tokenNumber = 0) returns false because token 0 has been issued.
counter.isTokenAvailable(tokenNumber = 2) returns true.
After counter.returnToken(tokenNumber = 0), counter.issueToken() returns 0 again.
RestaurantTokenCounter counter = new RestaurantTokenCounter(tokenCount = 2)
counter.issueToken() returns 0.
counter.issueToken() returns 1.
counter.issueToken() returns -1 because no token is available.
After counter.returnToken(tokenNumber = 1), counter.isTokenAvailable(tokenNumber = 1) returns true.
RestaurantTokenCounter counter = new RestaurantTokenCounter(tokenCount = 3)
counter.returnToken(tokenNumber = 2) makes no change because token 2 is already available.
counter.issueToken() returns 0.