From 44ce8b9fd4777d45186def8a5c9c48406d4adfa7 Mon Sep 17 00:00:00 2001 From: li_chx Date: Tue, 19 May 2026 11:44:18 +0800 Subject: [PATCH] =?UTF-8?q?2540.=20=E6=9C=80=E5=B0=8F=E5=85=AC=E5=85=B1?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 53 +++++++++++++++++------------------------------------ 1 file changed, 17 insertions(+), 36 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5abbd11..14dda91 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,49 +1,30 @@ mod arr; struct Solution {} -use std::collections::VecDeque; impl Solution { - pub fn can_reach(arr: Vec, start: i32) -> bool { - let start = start as usize; - if arr[start] == 0 { - return true; - } - let mut depth = vec![arr.len() as i32 + 1; arr.len()]; - depth[start] = 0; - let mut queue = VecDeque::new(); - let mut inserted = vec![false; arr.len()]; - inserted[start] = true; - queue.push_back(start); - while let Some(x) = queue.pop_front() { - let y = x + arr[x] as usize; - let mut func = |inserted: &mut Vec, y: usize| -> bool { - if !inserted[y] { - depth[y] = depth[x] + 1; - queue.push_back(y); - (*inserted)[y] = true; - if arr[y] == 0 { - return true; - } - } - return false; - }; - if y < arr.len() { - if func(&mut inserted, y) { - return true; - } + pub fn get_common(nums1: Vec, nums2: Vec) -> i32 { + let (mut a, mut b) = (0,0); + loop { + if nums1[a] == nums2[b] { + return nums1[a]; } - let y = x as i32 - arr[x]; - if y >= 0 { - let y = y as usize; - if func(&mut inserted, y) { - return true; + if nums1[a] < nums2[b] { + a += 1; + if a >= nums1.len() { + break; + } + } else { + b += 1; + if b >= nums2.len() { + break; } } } - false + -1 } } + fn main() { - println!("{:?}", Solution::can_reach(vec![4, 2, 3, 0, 3, 1, 2], 5)); + println!("{:?}", Solution::get_common(vec![1,2,3,6], vec![2,3,4,5])); }