/* * @lc app=leetcode id=933 lang=rust * * [933] Number of Recent Calls * * https://leetcode.com/problems/number-of-recent-calls/description/ * * algorithms * Easy (70.51%) * Total Accepted: 37.6K * Total Submissions: 53.3K * Testcase Example: '["RecentCounter","ping","ping","ping","ping"]\n[[],[1],[100],[3001],[3002]]' * * 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. * * * * Example 1: * * * Input: inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = * [[],[1],[100],[3001],[3002]] * Output: [null,1,2,3,3] * * * * Note: * * * Each test case will have at most 10000 calls to ping. * Each test case will call ping with strictly increasing values of t. * Each call to ping will have 1 <= t <= 10^9. * * * * * */ use std::borrow::BorrowMut; use std::collections::VecDeque; struct RecentCounter { q: VecDeque, } /** * `&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 { RecentCounter{ q: VecDeque::new(), } } pub fn ping(&mut self, t: i32) -> i32 { let q = self.q.borrow_mut(); q.push_back(t); while let Some(v) = q.front() { if *v < t - 3000 { q.pop_front(); } else { break; } } q.len() as i32 } } /** * Your RecentCounter object will be instantiated and called as such: * let obj = RecentCounter::new(); * let ret_1: i32 = obj.ping(t); */ use std::collections::HashMap; use std::fmt::Debug; use std::hash::Hash; #[allow(dead_code)] pub fn print_map(map: &HashMap) { for (k, v) in map.iter() { println!("{:?}: {:?}", k, v); } } #[allow(dead_code)] pub fn say_vec(nums: Vec){ println!("{:?}", nums); } #[allow(dead_code)] pub fn char_frequency(s: String) -> HashMap { let mut res:HashMap = HashMap::new(); for c in s.chars(){ *res.entry(c).or_insert(0) += 1; } res }