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); }