diff --git a/solution/2200-2299/2251.Number of Flowers in Full Bloom/README.md b/solution/2200-2299/2251.Number of Flowers in Full Bloom/README.md index 14d9bf1bfa263..f38fc42cc3551 100644 --- a/solution/2200-2299/2251.Number of Flowers in Full Bloom/README.md +++ b/solution/2200-2299/2251.Number of Flowers in Full Bloom/README.md @@ -221,6 +221,59 @@ public: }; ``` +### **Rust** + +```rust +use std::collections::BTreeMap; + +impl Solution { + #[allow(dead_code)] + pub fn full_bloom_flowers(flowers: Vec>, people: Vec) -> Vec { + let n = people.len(); + + // First sort the people vector based on the first item + let mut people: Vec<(usize, i32)> = people + .into_iter() + .enumerate() + .map(|x| x) + .collect(); + + people.sort_by(|lhs, rhs| { + lhs.1.cmp(&rhs.1) + }); + + // Initialize the difference vector + let mut diff = BTreeMap::new(); + let mut ret = vec![0; n]; + + for f in flowers { + let (left, right) = (f[0], f[1]); + diff + .entry(left) + .and_modify(|x| *x += 1) + .or_insert(1); + + diff + .entry(right + 1) + .and_modify(|x| *x -= 1) + .or_insert(-1); + } + + let mut sum = 0; + let mut i = 0; + for (k, v) in diff { + while i < n && people[i].1 < k { + ret[people[i].0] += sum; + i += 1; + } + sum += v; + } + + ret + } +} +``` + ### **Go** ```go diff --git a/solution/2200-2299/2251.Number of Flowers in Full Bloom/README_EN.md b/solution/2200-2299/2251.Number of Flowers in Full Bloom/README_EN.md index 05bfcc2fcb8a0..57ea183266b3d 100644 --- a/solution/2200-2299/2251.Number of Flowers in Full Bloom/README_EN.md +++ b/solution/2200-2299/2251.Number of Flowers in Full Bloom/README_EN.md @@ -207,6 +207,59 @@ public: }; ``` +### **Rust** + +```rust +use std::collections::BTreeMap; + +impl Solution { + #[allow(dead_code)] + pub fn full_bloom_flowers(flowers: Vec>, people: Vec) -> Vec { + let n = people.len(); + + // First sort the people vector based on the first item + let mut people: Vec<(usize, i32)> = people + .into_iter() + .enumerate() + .map(|x| x) + .collect(); + + people.sort_by(|lhs, rhs| { + lhs.1.cmp(&rhs.1) + }); + + // Initialize the difference vector + let mut diff = BTreeMap::new(); + let mut ret = vec![0; n]; + + for f in flowers { + let (left, right) = (f[0], f[1]); + diff + .entry(left) + .and_modify(|x| *x += 1) + .or_insert(1); + + diff + .entry(right + 1) + .and_modify(|x| *x -= 1) + .or_insert(-1); + } + + let mut sum = 0; + let mut i = 0; + for (k, v) in diff { + while i < n && people[i].1 < k { + ret[people[i].0] += sum; + i += 1; + } + sum += v; + } + + ret + } +} +``` + ### **Go** ```go diff --git a/solution/2200-2299/2251.Number of Flowers in Full Bloom/Solution.rs b/solution/2200-2299/2251.Number of Flowers in Full Bloom/Solution.rs new file mode 100644 index 0000000000000..fbf7709968760 --- /dev/null +++ b/solution/2200-2299/2251.Number of Flowers in Full Bloom/Solution.rs @@ -0,0 +1,48 @@ +use std::collections::BTreeMap; + +impl Solution { + #[allow(dead_code)] + pub fn full_bloom_flowers(flowers: Vec>, people: Vec) -> Vec { + let n = people.len(); + + // First sort the people vector based on the first item + let mut people: Vec<(usize, i32)> = people + .into_iter() + .enumerate() + .map(|x| x) + .collect(); + + people.sort_by(|lhs, rhs| { + lhs.1.cmp(&rhs.1) + }); + + // Initialize the difference vector + let mut diff = BTreeMap::new(); + let mut ret = vec![0; n]; + + for f in flowers { + let (left, right) = (f[0], f[1]); + diff + .entry(left) + .and_modify(|x| *x += 1) + .or_insert(1); + + diff + .entry(right + 1) + .and_modify(|x| *x -= 1) + .or_insert(-1); + } + + let mut sum = 0; + let mut i = 0; + for (k, v) in diff { + while i < n && people[i].1 < k { + ret[people[i].0] += sum; + i += 1; + } + sum += v; + } + + ret + } +} \ No newline at end of file