Skip to content

Commit 306eab1

Browse files
authored
feat: add Rust solution for lc No.3761 (#5163)
1 parent 5828e00 commit 306eab1

3 files changed

Lines changed: 91 additions & 0 deletions

File tree

solution/3700-3799/3761.Minimum Absolute Distance Between Mirror Pairs/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,38 @@ function minMirrorPairDistance(nums: number[]): number {
238238
}
239239
```
240240

241+
#### Rust
242+
243+
```rust
244+
use std::collections::HashMap;
245+
246+
impl Solution {
247+
pub fn min_mirror_pair_distance(nums: Vec<i32>) -> i32 {
248+
let n = nums.len();
249+
let mut ans = n as i32 + 1;
250+
let mut pos: HashMap<i32, i32> = HashMap::new();
251+
252+
fn reverse(mut x: i32) -> i32 {
253+
let mut y = 0;
254+
while x > 0 {
255+
y = y * 10 + x % 10;
256+
x /= 10;
257+
}
258+
y
259+
}
260+
261+
for (i, &v) in nums.iter().enumerate() {
262+
if let Some(&j) = pos.get(&v) {
263+
ans = ans.min(i as i32 - j);
264+
}
265+
pos.insert(reverse(v), i as i32);
266+
}
267+
268+
if ans > n as i32 { -1 } else { ans }
269+
}
270+
}
271+
```
272+
241273
<!-- tabs:end -->
242274

243275
<!-- solution:end -->

solution/3700-3799/3761.Minimum Absolute Distance Between Mirror Pairs/README_EN.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,38 @@ function minMirrorPairDistance(nums: number[]): number {
235235
}
236236
```
237237

238+
#### Rust
239+
240+
```rust
241+
use std::collections::HashMap;
242+
243+
impl Solution {
244+
pub fn min_mirror_pair_distance(nums: Vec<i32>) -> i32 {
245+
let n = nums.len();
246+
let mut ans = n as i32 + 1;
247+
let mut pos: HashMap<i32, i32> = HashMap::new();
248+
249+
fn reverse(mut x: i32) -> i32 {
250+
let mut y = 0;
251+
while x > 0 {
252+
y = y * 10 + x % 10;
253+
x /= 10;
254+
}
255+
y
256+
}
257+
258+
for (i, &v) in nums.iter().enumerate() {
259+
if let Some(&j) = pos.get(&v) {
260+
ans = ans.min(i as i32 - j);
261+
}
262+
pos.insert(reverse(v), i as i32);
263+
}
264+
265+
if ans > n as i32 { -1 } else { ans }
266+
}
267+
}
268+
```
269+
238270
<!-- tabs:end -->
239271

240272
<!-- solution:end -->
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use std::collections::HashMap;
2+
3+
impl Solution {
4+
pub fn min_mirror_pair_distance(nums: Vec<i32>) -> i32 {
5+
let n = nums.len();
6+
let mut ans = n as i32 + 1;
7+
let mut pos: HashMap<i32, i32> = HashMap::new();
8+
9+
fn reverse(mut x: i32) -> i32 {
10+
let mut y = 0;
11+
while x > 0 {
12+
y = y * 10 + x % 10;
13+
x /= 10;
14+
}
15+
y
16+
}
17+
18+
for (i, &v) in nums.iter().enumerate() {
19+
if let Some(&j) = pos.get(&v) {
20+
ans = ans.min(i as i32 - j);
21+
}
22+
pos.insert(reverse(v), i as i32);
23+
}
24+
25+
if ans > n as i32 { -1 } else { ans }
26+
}
27+
}

0 commit comments

Comments
 (0)