From 6e59cabd843ccfb8a2a797270a8d2e5590b1fee5 Mon Sep 17 00:00:00 2001 From: li_chx Date: Mon, 18 May 2026 16:46:04 +0800 Subject: [PATCH] =?UTF-8?q?1345.=20=E8=B7=B3=E8=B7=83=E6=B8=B8=E6=88=8F=20?= =?UTF-8?q?IV?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 61 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/src/main.rs b/src/main.rs index f4563bd..7cf4a89 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,22 +1,57 @@ mod arr; struct Solution {} +use std::collections::hash_map::Entry; +use std::collections::{HashMap, VecDeque}; + impl Solution { - pub fn separate_digits(nums: Vec) -> Vec { - let mut ans = vec![]; - for x in nums.iter() { - let mut y = *x; - let mut local_ans = vec![]; - while y > 0 { - local_ans.push(y % 10); - y /= 10; - } - local_ans.reverse(); - ans.extend(local_ans.iter()); + pub fn min_jumps(arr: Vec) -> i32 { + let mut mp = HashMap::new(); + for i in 0..arr.len() { + mp.entry(arr[i]) + .and_modify(|x: &mut Vec| x.push(i)) + .or_insert(vec![i]); } - ans + let mut depth = vec![arr.len() as i32 + 1; arr.len()]; + depth[arr.len() - 1] = 0; + let mut queue = VecDeque::new(); + let mut inserted = vec![false; arr.len()]; + inserted[arr.len() - 1] = true; + queue.push_back(arr.len() - 1); + while let Some(x) = queue.pop_front() { + if x > 0 { + if !inserted[x - 1] { + depth[x - 1] = depth[x] + 1; + queue.push_back(x - 1); + inserted[x - 1] = true; + } + } + if x + 1 < arr.len() { + if !inserted[x + 1] { + depth[x + 1] = depth[x] + 1; + queue.push_back(x + 1); + inserted[x + 1] = true; + } + } + if let Entry::Occupied(arr) = mp.entry(arr[x]) { + for y in arr.get() { + if !inserted[*y] { + depth[*y] = depth[x] + 1; + queue.push_back(*y); + inserted[*y] = true; + } + } + } + if inserted[0] { + return depth[0]; + } + } + -1 } } fn main() { - println!("{:?}", Solution::separate_digits(vec![13, 25, 83, 77])); + println!( + "{:?}", + Solution::min_jumps(vec![100, -23, -23, 404, 100, 23, 23, 23, 3, 404]) + ); }