Skip to content

Commit e4a8898

Browse files
committed
feat: add rust solution to lc problem: No.2251
1 parent d32778c commit e4a8898

File tree

3 files changed

+154
-0
lines changed

3 files changed

+154
-0
lines changed

solution/2200-2299/2251.Number of Flowers in Full Bloom/README.md

+53
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,59 @@ public:
217217
};
218218
```
219219

220+
### **Rust**
221+
222+
```rust
223+
use std::collections::BTreeMap;
224+
225+
impl Solution {
226+
#[allow(dead_code)]
227+
pub fn full_bloom_flowers(flowers: Vec<Vec<i32>>, people: Vec<i32>) -> Vec<i32> {
228+
let n = people.len();
229+
230+
// First sort the people vector based on the first item
231+
let mut people: Vec<(usize, i32)> = people
232+
.into_iter()
233+
.enumerate()
234+
.map(|x| x)
235+
.collect();
236+
237+
people.sort_by(|lhs, rhs| {
238+
lhs.1.cmp(&rhs.1)
239+
});
240+
241+
// Initialize the difference vector
242+
let mut diff = BTreeMap::new();
243+
let mut ret = vec![0; n];
244+
245+
for f in flowers {
246+
let (left, right) = (f[0], f[1]);
247+
diff
248+
.entry(left)
249+
.and_modify(|x| *x += 1)
250+
.or_insert(1);
251+
252+
diff
253+
.entry(right + 1)
254+
.and_modify(|x| *x -= 1)
255+
.or_insert(-1);
256+
}
257+
258+
let mut sum = 0;
259+
let mut i = 0;
260+
for (k, v) in diff {
261+
while i < n && people[i].1 < k {
262+
ret[people[i].0] += sum;
263+
i += 1;
264+
}
265+
sum += v;
266+
}
267+
268+
ret
269+
}
270+
}
271+
```
272+
220273
### **Go**
221274

222275
```go

solution/2200-2299/2251.Number of Flowers in Full Bloom/README_EN.md

+53
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,59 @@ public:
205205
};
206206
```
207207

208+
### **Rust**
209+
210+
```rust
211+
use std::collections::BTreeMap;
212+
213+
impl Solution {
214+
#[allow(dead_code)]
215+
pub fn full_bloom_flowers(flowers: Vec<Vec<i32>>, people: Vec<i32>) -> Vec<i32> {
216+
let n = people.len();
217+
218+
// First sort the people vector based on the first item
219+
let mut people: Vec<(usize, i32)> = people
220+
.into_iter()
221+
.enumerate()
222+
.map(|x| x)
223+
.collect();
224+
225+
people.sort_by(|lhs, rhs| {
226+
lhs.1.cmp(&rhs.1)
227+
});
228+
229+
// Initialize the difference vector
230+
let mut diff = BTreeMap::new();
231+
let mut ret = vec![0; n];
232+
233+
for f in flowers {
234+
let (left, right) = (f[0], f[1]);
235+
diff
236+
.entry(left)
237+
.and_modify(|x| *x += 1)
238+
.or_insert(1);
239+
240+
diff
241+
.entry(right + 1)
242+
.and_modify(|x| *x -= 1)
243+
.or_insert(-1);
244+
}
245+
246+
let mut sum = 0;
247+
let mut i = 0;
248+
for (k, v) in diff {
249+
while i < n && people[i].1 < k {
250+
ret[people[i].0] += sum;
251+
i += 1;
252+
}
253+
sum += v;
254+
}
255+
256+
ret
257+
}
258+
}
259+
```
260+
208261
### **Go**
209262

210263
```go
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
use std::collections::BTreeMap;
2+
3+
impl Solution {
4+
#[allow(dead_code)]
5+
pub fn full_bloom_flowers(flowers: Vec<Vec<i32>>, people: Vec<i32>) -> Vec<i32> {
6+
let n = people.len();
7+
8+
// First sort the people vector based on the first item
9+
let mut people: Vec<(usize, i32)> = people
10+
.into_iter()
11+
.enumerate()
12+
.map(|x| x)
13+
.collect();
14+
15+
people.sort_by(|lhs, rhs| {
16+
lhs.1.cmp(&rhs.1)
17+
});
18+
19+
// Initialize the difference vector
20+
let mut diff = BTreeMap::new();
21+
let mut ret = vec![0; n];
22+
23+
for f in flowers {
24+
let (left, right) = (f[0], f[1]);
25+
diff
26+
.entry(left)
27+
.and_modify(|x| *x += 1)
28+
.or_insert(1);
29+
30+
diff
31+
.entry(right + 1)
32+
.and_modify(|x| *x -= 1)
33+
.or_insert(-1);
34+
}
35+
36+
let mut sum = 0;
37+
let mut i = 0;
38+
for (k, v) in diff {
39+
while i < n && people[i].1 < k {
40+
ret[people[i].0] += sum;
41+
i += 1;
42+
}
43+
sum += v;
44+
}
45+
46+
ret
47+
}
48+
}

0 commit comments

Comments
 (0)