1848. 到目标元素的最小距离

This commit is contained in:
li_chx 2026-04-13 08:49:21 +08:00
parent 444863b22d
commit 283b4c1518
Signed by: li_chx
GPG Key ID: C7CF27EFA1E58BAC
1 changed files with 9 additions and 20 deletions

View File

@ -1,32 +1,21 @@
use std::collections::HashMap;
mod arr; mod arr;
struct Solution {} struct Solution {}
impl Solution { impl Solution {
pub fn minimum_distance(nums: Vec<i32>) -> i32 { pub fn get_min_distance(nums: Vec<i32>, target: i32, start: i32) -> i32 {
let mut mp = HashMap::<i32, Vec<i32>>::new(); let mut ans = 1000000;
for i in 0..nums.len() { for i in 0..nums.len() {
if mp.contains_key(&nums[i]) { if nums[i] == target {
mp.get_mut(&nums[i]).unwrap().push(i as i32); ans = ans.min((i as i32 - start).abs_diff(0) as i32);
} else {
mp.insert(nums[i], vec![i as i32]);
} }
} }
let mut ans = 1e9 as i32; ans
for key in mp.keys() {
let arr = mp.get(key).unwrap();
if arr.len() < 3 {
continue;
}
for i in 2..arr.len() {
ans = ans.min(arr[i] - arr[i - 2]);
}
}
if ans == 1e9 as i32 { -1 } else { ans * 2 }
} }
} }
fn main() { fn main() {
println!("{:?}", Solution::minimum_distance(vec![1,1,2,3,2,1,2],)); println!(
"{:?}",
Solution::get_min_distance(vec![1, 1, 2, 3, 2, 1, 2], 1, 2)
);
} }