-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathProblem16.js
46 lines (42 loc) · 1.1 KB
/
Problem16.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Problem 16
//
// This problem was asked by Twitter.
//
// You run an e-commerce website and want to record the last N order ids in a log.
//
// Implement a data structure to accomplish this, with the following API:
//
// record(order_id): adds the order_id to the log
// get_last(i): gets the ith last element from the log. i is guaranteed to be smaller than or equal to N.
// You should be as efficient with time and space as possible.
//
// Log takes O(N) Space due to size
// record and getLast is O(1) Time complexity
class Log {
/**
* Creates a Log. Initializes circular buffer with size
* @param {number} size
*/
constructor(size) {
this.size = size;
this.logArr = [];
this.currIndex = 0;
}
/**
* Adds the order id to the log.
* @param {number} orderId
*/
record(orderId) {
this.logArr[this.currIndex] = orderId;
this.currIndex = (this.currIndex + 1) % this.size;
}
/**
* Gets the ith last element.
* @param {number} i
* @return {number}
*/
getLast(i) {
return this.logArr[(this.currIndex - i + this.size) % this.size];
}
}
export default Log;