-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfish.rs
42 lines (34 loc) · 932 Bytes
/
fish.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use std::collections::VecDeque;
struct Fish;
impl Fish {
fn solution(a: &mut Vec<i32>, b: &mut Vec<i32>) -> i32 {
let n = a.len();
let mut alive = a.len();
let mut f: VecDeque<i32> = VecDeque::new();
for i in 0..n {
if b[i] == 1 {
f.push_front(i as i32);
} else if b[i] == 0 && !f.is_empty() {
while !f.is_empty() && a[*f.front().unwrap() as usize] < a[i] {
f.pop_front();
alive -= 1;
}
if !f.is_empty() && a[*f.front().unwrap() as usize] > a[i] {
alive -= 1;
}
}
}
alive as i32
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_fish() {
assert_eq!(
Fish::solution(&mut vec![4, 3, 2, 1, 5], &mut vec![0, 1, 0, 0, 0]),
2
);
}
}