Frog Jump LeetCode solution in Rust

1
use std::collections::{HashSet, VecDeque};
2
impl Solution {
3
pub fn can_cross(stones: Vec<i32>) -> bool {
4
if stones[0] != stones[1] - 1 {
5
return false;
6
}
7

8
let mut queue = VecDeque::from([(stones[1], 1)]);
9
let mut visited = HashSet::from([(stones[1], 1)]);
10

11
let valid_stones = |stone: i32| {
12
let (min, max) = (1.max(stone - 1), stone + 2);
13
(min..max)
14
.filter_map(|stone| stones.binary_search(&stone).ok())
15
.map(|idx| stones[idx])
16
};
17

18
while let Some((loc, leap)) = queue.pop_front() {
19
if Some(&loc) == stones.last() {
20
return true;
21
}
22

23
for stone in valid_stones(loc + leap) {
24
let path = (stone, stone - loc);
25
if visited.insert(path) {
26
queue.push_back(path)
27
}
28
}
29
}
30

31
false
32
}
33
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0