rustgym/leetcode/
_362_design_hit_counter.rs1use std::collections::VecDeque;
2
3#[derive(Default)]
4struct HitCounter {
5 queue: VecDeque<i32>,
6}
7
8impl HitCounter {
9 fn new() -> Self {
10 HitCounter {
11 queue: VecDeque::new(),
12 }
13 }
14
15 fn hit(&mut self, timestamp: i32) {
16 while let Some(first) = self.queue.front() {
17 if first + 300 <= timestamp {
18 self.queue.pop_front();
19 } else {
20 break;
21 }
22 }
23 self.queue.push_back(timestamp);
24 }
25
26 fn get_hits(&mut self, timestamp: i32) -> i32 {
27 while let Some(first) = self.queue.front() {
28 if first + 300 <= timestamp {
29 self.queue.pop_front();
30 } else {
31 break;
32 }
33 }
34 self.queue.len() as i32
35 }
36}
37
38#[test]
39fn test() {
40 let mut obj = HitCounter::new();
41 obj.hit(1);
42 obj.hit(2);
43 obj.hit(3);
44 assert_eq!(obj.get_hits(4), 3);
45 obj.hit(300);
46 assert_eq!(obj.get_hits(300), 4);
47 assert_eq!(obj.get_hits(301), 3);
48}