From e4a889875d3fee21ed85cf51f22ac3a7a0aa8115 Mon Sep 17 00:00:00 2001 From: Michael Xu Date: Thu, 28 Sep 2023 12:15:20 -0400 Subject: [PATCH] feat: add rust solution to lc problem: No.2251 --- .../README.md | 53 +++++++++++++++++++ .../README_EN.md | 53 +++++++++++++++++++ .../Solution.rs | 48 +++++++++++++++++ 3 files changed, 154 insertions(+) create mode 100644 solution/2200-2299/2251.Number of Flowers in Full Bloom/Solution.rs 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 47aab034aa184..89894e1b87c07 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 @@ -217,6 +217,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 85e38cd37ecb0..4b1d282d0ffa9 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 @@ -205,6 +205,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