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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
//! Number of Recent Calls[leetcode: number_of_recent_calls](https://leetcode.com/problems/number-of-recent-calls/) //! //! Write a class `RecentCounter` to count recent requests. //! //! It has only one method: `ping(int t)`, where t represents some time in milliseconds. //! //! Return the number of `pings` that have been made from 3000 milliseconds ago until now. //! //! Any ping with time in `[t - 3000, t]` will count, including the current ping. //! //! It is guaranteed that every call to `ping` uses a strictly larger value of `t` than before. //! //! **Example1:** //! //! ``` //! Input: inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = [[],[1],[100],[3001],[3002]] //! Output: [null,1,2,3,3] //! ``` //! //! **Note** //! //! 1. Each test case will have at most `10000` calls to `ping`. //! 2. Each test case will call `ping` with strictly increasing values of `t`. //! 3. Each call to ping will have `1 <= t <= 10^9`. /// # Solutions /// /// # Approach 1: Queue /// /// * Time complexity: O(n) /// /// * Space complexity: O(1) /// /// * Runtime: 40 ms /// * Memory: 5.4 MB /// /// ```rust /// use std::collections::VecDeque; /// /// #[derive(Default)] /// struct RecentCounter { /// pings: VecDeque<i32>, /// } /// /// /** /// * `&self` means the method takes an immutable reference. /// * If you need a mutable reference, change it to `&mut self` instead. /// */ /// impl RecentCounter { /// /// fn new() -> Self { /// Default::default() /// } /// /// fn ping(&mut self, t: i32) -> i32 { /// self.pings.push_back(t); /// while t - *self.pings.front().unwrap() > 3000 { /// self.pings.pop_front(); /// } /// /// self.pings.len() as i32 /// } /// } /// /// /** /// * Your RecentCounter object will be instantiated and called as such: /// * let obj = RecentCounter::new(); /// * let ret_1: i32 = obj.ping(t); /// */ /// ``` /// #[allow(dead_code)] pub struct RecentCounter { }