From ca0e9fdd9ed927d7751b5307e8891285f2f7dafa Mon Sep 17 00:00:00 2001 From: li-chx Date: Sun, 27 Jul 2025 10:15:01 +0800 Subject: [PATCH] =?UTF-8?q?2210.=20=E7=BB=9F=E8=AE=A1=E6=95=B0=E7=BB=84?= =?UTF-8?q?=E4=B8=AD=E5=B3=B0=E5=92=8C=E8=B0=B7=E7=9A=84=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 43 +++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/main.rs b/src/main.rs index 8cd4572..8f88470 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,30 +1,37 @@ struct Solution; impl Solution { - pub fn max_subarrays(n: i32, mut conflicting_pairs: Vec>) -> i64 { - let mut arr: Vec> = vec![vec![]; (n + 1) as usize]; - for pair in conflicting_pairs.iter_mut() { - if pair[0] > pair[1] { - pair.swap(0, 1); + pub fn count_hill_valley(nums: Vec) -> i32 { + let mut down = false; + for i in 1..nums.len() { + if nums[i] != nums[0]{ + down = nums[i] < nums[0]; + break; } - arr[pair[0] as usize].push(pair[1]); } - let mut ans: i64 = 0; - let mut extra: Vec = vec![0; (n + 2) as usize]; - let mut b: Vec = vec![(n + 1) as i64; (n + 1) as usize]; - for i in (1..=n as usize).rev() { - b.extend(arr[i].iter().map(|&x| x as i64)); - b.sort_unstable(); - b.truncate(2); - - ans += (b[0] as i64) - (i as i64); - extra[b[0] as usize] += b[1] - b[0]; + let mut ans = 0; + for i in 2..nums.len() { + if nums[i] == nums[i-1] + { + continue; + } + if down && nums[i] >nums[i-1] + { + ans += 1; + down = false; + continue; + } + if !down && nums[i] < nums[i-1] { + ans += 1; + down = true; + continue; + } } - ans + *extra.iter().max().unwrap() as i64 + ans } } fn main() { - let sl = Solution::max_subarrays(5, vec![vec![1, 2], vec![2, 5], vec![3, 5]]); + let sl = Solution::count_hill_valley(vec![6,6,5,5,4,1]); println!("{}", sl); }