diff --git a/src/problem/mod.rs b/src/problem/mod.rs index b8e3bb7..66ce4b0 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -530,3 +530,5 @@ mod p2234_maximum_total_beauty_of_the_gardens; mod p2070_most_beautiful_item_for_each_query; mod p2269_find_the_k_beauty_of_a_number; + +mod p2012_sum_of_beauty_in_the_array; diff --git a/src/problem/p2012_sum_of_beauty_in_the_array.rs b/src/problem/p2012_sum_of_beauty_in_the_array.rs new file mode 100644 index 0000000..3634a0b --- /dev/null +++ b/src/problem/p2012_sum_of_beauty_in_the_array.rs @@ -0,0 +1,48 @@ +/** + * [2012] Sum of Beauty in the Array + */ +pub struct Solution {} + +// submission codes start here + +impl Solution { + pub fn sum_of_beauties(nums: Vec) -> i32 { + let n = nums.len(); + let mut prefix = vec![0; n]; + let mut suffix = vec![i32::MAX; n]; + + for i in 0..n { + if i > 0 { + prefix[i] = prefix[i - 1].max(nums[i - 1]); + suffix[n - i - 1] = suffix[n - i].min(nums[n - i]); + } + } + + (1..n - 1) + .into_iter() + .map(|x| { + if nums[x] > prefix[x] && nums[x] < suffix[x] { + 2 + } else if nums[x] > nums[x - 1] && nums[x] < nums[x + 1] { + 1 + } else { + 0 + } + }) + .sum() + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_2012() { + assert_eq!(1, Solution::sum_of_beauties(vec![2, 4, 6, 4])); + assert_eq!(2, Solution::sum_of_beauties(vec![1, 2, 3])); + assert_eq!(0, Solution::sum_of_beauties(vec![3, 2, 1])); + } +}