From 9d6791ebca7fc42d76ddbaeff9cf6d5df3148579 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Mon, 24 Feb 2025 11:39:18 +0800 Subject: [PATCH] 20250224 finished. --- src/problem/mod.rs | 2 + src/problem/p1656_design_an_ordered_stream.rs | 71 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/problem/p1656_design_an_ordered_stream.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index f2b42c8..70f6e5f 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -502,3 +502,5 @@ mod p2209_minimum_white_tiles_after_covering_with_carpets; mod p2506_count_pairs_of_similar_strings; mod p1206_design_skiplist; + +mod p1656_design_an_ordered_stream; diff --git a/src/problem/p1656_design_an_ordered_stream.rs b/src/problem/p1656_design_an_ordered_stream.rs new file mode 100644 index 0000000..8b0c350 --- /dev/null +++ b/src/problem/p1656_design_an_ordered_stream.rs @@ -0,0 +1,71 @@ +/** + * [1656] Design an Ordered Stream + */ +pub struct Solution {} + +// submission codes start here + +struct OrderedStream { + array: Vec>, + pointer: usize, +} + +/** + * `&self` means the method takes an immutable reference. + * If you need a mutable reference, change it to `&mut self` instead. + */ +impl OrderedStream { + fn new(n: i32) -> Self { + let n = n as usize; + + Self { + array: vec![None; n], + pointer: 1, + } + } + + fn insert(&mut self, id_key: i32, value: String) -> Vec { + let id = id_key as usize - 1; + + self.array[id] = Some(value); + + let mut result = vec![]; + let mut pointer = self.pointer; + + while pointer <= self.array.len() { + if let Some(item) = &self.array[pointer - 1] { + result.push(item.clone()); + pointer += 1; + } else { + break; + } + } + self.pointer = pointer; + + result + } +} + +/** + * Your OrderedStream object will be instantiated and called as such: + * let obj = OrderedStream::new(n); + * let ret_1: Vec = obj.insert(idKey, value); + */ + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_1656() { + let mut stream = OrderedStream::new(5); + + assert_eq!(Vec::<&str>::new(), stream.insert(3, "ccccc".to_owned())); + assert_eq!(vec!["aaaaa"], stream.insert(1, "aaaaa".to_owned())); + assert_eq!(vec!["bbbbb", "ccccc"], stream.insert(2, "bbbbb".to_owned())); + assert_eq!(Vec::<&str>::new(), stream.insert(5, "eeeee".to_owned())); + assert_eq!(vec!["ddddd", "eeeee"], stream.insert(4, "ddddd".to_owned())); + } +}