From 12e28d075a345c7c4cafe67948f607f303c50e23 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Fri, 21 Mar 2025 14:09:00 +0800 Subject: [PATCH] 20250321 finished. --- src/problem/mod.rs | 2 ++ src/problem/p2680_maximum_or.rs | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/problem/p2680_maximum_or.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index f27cfd1..44a1816 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -550,3 +550,5 @@ mod p2614_prime_in_diagonal; mod p2610_convert_an_array_into_a_2d_array_with_conditions; mod p2612_minimum_reverse_operations; + +mod p2680_maximum_or; diff --git a/src/problem/p2680_maximum_or.rs b/src/problem/p2680_maximum_or.rs new file mode 100644 index 0000000..f9b940a --- /dev/null +++ b/src/problem/p2680_maximum_or.rs @@ -0,0 +1,46 @@ +/** + * [2680] Maximum OR + */ +pub struct Solution {} + +// submission codes start here + +impl Solution { + pub fn maximum_or(nums: Vec, k: i32) -> i64 { + let n = nums.len(); + let k = k as i64; + let mut prefix = vec![0; n]; + let mut suffix = vec![0; n]; + + for i in 0..n { + if i == 0 { + prefix[i] = 0; + suffix[n - i - 1] = 0; + } else { + prefix[i] = prefix[i - 1] | nums[i - 1] as i64; + suffix[n - i - 1] = suffix[n - i] | nums[n - i] as i64; + } + } + + let mut result = 0; + + for (i, &v) in nums.iter().enumerate() { + result = result.max(prefix[i] | ((v as i64) << k) | suffix[i]); + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_2680() { + assert_eq!(30, Solution::maximum_or(vec![12, 9], 1)); + assert_eq!(35, Solution::maximum_or(vec![8, 1, 2], 2)); + } +}