402. Restaurant Customer Tokens
Restaurant Customer Tokens

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.

Class

RestaurantTokenCounter

Constructor

RestaurantTokenCounter(int tokenCount)

Parameters

  • tokenCount: The total number of customer tokens.

Initially, every token is available.

Methods

issueToken

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.

isTokenAvailable

boolean isTokenAvailable(int tokenNumber)

Parameters

  • tokenNumber: The token number to check.

Returns

Return true if the token is available. Otherwise, return false.

returnToken

void returnToken(int tokenNumber)

Parameters

  • tokenNumber: The token number being returned.

Make the specified token available again. If it is already available, this operation has no effect.

Rules

  • Each token can be issued to only one customer at a time.
  • An issued token remains unavailable until it is returned.
  • issueToken always issues the smallest available token number.
  • A returned token can be issued again.

Constraints

  • 1 ≤ tokenCount ≤ 10,000
  • 0 ≤ tokenNumber < tokenCount
  • At most 20,000 calls will be made to issueToken, isTokenAvailable, and returnToken in total.

Examples

Example 1

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.

Example 2

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.

Example 3

RestaurantTokenCounter counter = new RestaurantTokenCounter(tokenCount = 3)

counter.returnToken(tokenNumber = 2) makes no change because token 2 is already available.

counter.issueToken() returns 0.



Please use Laptop/Desktop or any other large screen to add/edit code.