From f770cfbe041a32b7fc83303e695948e7e928e6fc Mon Sep 17 00:00:00 2001 From: jackfiled Date: Thu, 6 Mar 2025 12:06:56 +0800 Subject: [PATCH] 20250306 finished. --- src/problem/mod.rs | 2 + ...count_the_number_of_beautiful_subarrays.rs | 45 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/problem/p2588_count_the_number_of_beautiful_subarrays.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index eaf1f30..ce3fdbd 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -520,3 +520,5 @@ mod p1278_palindrome_partitioning_iii; mod p1745_palindrome_partitioning_iv; mod p1328_break_a_palindrome; + +mod p2588_count_the_number_of_beautiful_subarrays; diff --git a/src/problem/p2588_count_the_number_of_beautiful_subarrays.rs b/src/problem/p2588_count_the_number_of_beautiful_subarrays.rs new file mode 100644 index 0000000..dfe2573 --- /dev/null +++ b/src/problem/p2588_count_the_number_of_beautiful_subarrays.rs @@ -0,0 +1,45 @@ +/** + * [2588] Count the Number of Beautiful Subarrays + */ +pub struct Solution {} + +// submission codes start here +use std::collections::HashMap; + +impl Solution { + pub fn beautiful_subarrays(nums: Vec) -> i64 { + let n = nums.len(); + let mut prefix = vec![0; n + 1]; + + for i in 0..n { + prefix[i + 1] = prefix[i] ^ nums[i]; + } + + let mut map = HashMap::new(); + + let mut result = 0; + for i in 0..=n { + if let Some(count) = map.get(&prefix[i]) { + result += count; + } + + let entry = map.entry(prefix[i] ^ 0).or_insert(0); + *entry += 1; + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_2588() { + assert_eq!(2, Solution::beautiful_subarrays(vec![4, 3, 1, 2, 4])); + assert_eq!(0, Solution::beautiful_subarrays(vec![1, 10, 4])); + } +}