rustgym/leetcode/
_362_design_hit_counter.rs

1use 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}