Design a data structure that can efficiently manage data packets in a network router. Each data packet consists of the following attributes:
source
: A unique identifier for the machine that generated the packet.destination
: A unique identifier for the target machine.timestamp
: The time at which the packet arrived at the router.Implement the Router
class:
Router(int memoryLimit)
: Initializes the Router object with a fixed memory limit.
memoryLimit
is the maximum number of packets the router can store at any given time.bool addPacket(int source, int destination, int timestamp)
: Adds a packet with the given attributes to the router.
source
, destination
, and timestamp
already exists in the router.true
if the packet is successfully added (i.e., it is not a duplicate); otherwise return false
.int[] forwardPacket()
: Forwards the next packet in FIFO (First In First Out) order.
[source, destination, timestamp]
.int getCount(int destination, int startTime, int endTime)
:
[startTime, endTime]
.Note that queries for addPacket
will be made in increasing order of timestamp
.
Example 1:
Input:
["Router", "addPacket", "addPacket", "addPacket", "addPacket", "addPacket", "forwardPacket", "addPacket", "getCount"]
[[3], [1, 4, 90], [2, 5, 90], [1, 4, 90], [3, 5, 95], [4, 5, 105], [], [5, 2, 110], [5, 100, 110]]
Output:
[null, true, true, false, true, true, [2, 5, 90], true, 1]
Explanation
Router router = new Router(3); // Initialize Router with memoryLimit of 3.[1, 4, 90]
is removed as number of packets exceeds memoryLimit. Return True.[2, 5, 90]
and remove it from router.[100, 110]
is [4, 5, 105]
. Return 1.Example 2:
Input:
["Router", "addPacket", "forwardPacket", "forwardPacket"]
[[2], [7, 4, 90], [], []]
Output:
[null, true, [7, 4, 90], []]
Explanation
Router router = new Router(2); // InitializeRouter
with memoryLimit
of 2.[7, 4, 90]
.[]
.
Constraints:
2 <= memoryLimit <= 105
1 <= source, destination <= 2 * 105
1 <= timestamp <= 109
1 <= startTime <= endTime <= 109
105
calls will be made to addPacket
, forwardPacket
, and getCount
methods altogether.addPacket
will be made in increasing order of timestamp
.