From 45f68fda89a4257e3a73d85e34af9e0cebbd427a Mon Sep 17 00:00:00 2001 From: Wei Tan Date: Fri, 3 Jan 2025 11:49:46 +0800 Subject: [PATCH] 1829. Maximum XOR for Each Query: AC --- src/solution/mod.rs | 1 + .../s1829_maximum_xor_for_each_query.rs | 103 ++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 src/solution/s1829_maximum_xor_for_each_query.rs diff --git a/src/solution/mod.rs b/src/solution/mod.rs index ccc102cc..88c6d23f 100644 --- a/src/solution/mod.rs +++ b/src/solution/mod.rs @@ -1378,3 +1378,4 @@ mod s1824_minimum_sideway_jumps; mod s1825_finding_mk_average; mod s1827_minimum_operations_to_make_the_array_increasing; mod s1828_queries_on_number_of_points_inside_a_circle; +mod s1829_maximum_xor_for_each_query; diff --git a/src/solution/s1829_maximum_xor_for_each_query.rs b/src/solution/s1829_maximum_xor_for_each_query.rs new file mode 100644 index 00000000..645c0388 --- /dev/null +++ b/src/solution/s1829_maximum_xor_for_each_query.rs @@ -0,0 +1,103 @@ +/** + * [1829] Maximum XOR for Each Query + * + * You are given a sorted array nums of n non-negative integers and an integer maximumBit. You want to perform the following query n times: + *
    + * Find a non-negative integer k < 2^maximumBit such that nums[0] XOR nums[1] XOR ... XOR nums[nums.length-1] XOR k is maximized. k is the answer to the i^th query. + * Remove the last element from the current array nums. + *
+ * Return an array answer, where answer[i] is the answer to the i^th query. + * + * Example 1: + * + * Input: nums = [0,1,1,3], maximumBit = 2 + * Output: [0,3,2,3] + * Explanation: The queries are answered as follows: + * 1^st query: nums = [0,1,1,3], k = 0 since 0 XOR 1 XOR 1 XOR 3 XOR 0 = 3. + * 2^nd query: nums = [0,1,1], k = 3 since 0 XOR 1 XOR 1 XOR 3 = 3. + * 3^rd query: nums = [0,1], k = 2 since 0 XOR 1 XOR 2 = 3. + * 4^th query: nums = [0], k = 3 since 0 XOR 3 = 3. + * + * Example 2: + * + * Input: nums = [2,3,4,7], maximumBit = 3 + * Output: [5,2,6,5] + * Explanation: The queries are answered as follows: + * 1^st query: nums = [2,3,4,7], k = 5 since 2 XOR 3 XOR 4 XOR 7 XOR 5 = 7. + * 2^nd query: nums = [2,3,4], k = 2 since 2 XOR 3 XOR 4 XOR 2 = 7. + * 3^rd query: nums = [2,3], k = 6 since 2 XOR 3 XOR 6 = 7. + * 4^th query: nums = [2], k = 5 since 2 XOR 5 = 7. + * + * Example 3: + * + * Input: nums = [0,1,2,2,5,7], maximumBit = 3 + * Output: [4,3,6,4,6,7] + * + * + * Constraints: + * + * nums.length == n + * 1 <= n <= 10^5 + * 1 <= maximumBit <= 20 + * 0 <= nums[i] < 2^maximumBit + * nums​​​ is sorted in ascending order. + * + */ +pub struct Solution {} + +// problem: https://leetcode.com/problems/maximum-xor-for-each-query/ +// discuss: https://leetcode.com/problems/maximum-xor-for-each-query/discuss/?currentPage=1&orderBy=most_votes&query= + +// submission codes start here + +impl Solution { + pub fn get_maximum_xor(nums: Vec, maximum_bit: i32) -> Vec { + let mut s = nums.iter().fold(0, |s, n| s ^ *n); + let m = (1 << maximum_bit) - 1; // maximum + let mut result = Vec::with_capacity(nums.len()); + + for &n in nums.iter().rev() { + result.push(s ^ m); + s ^= n; + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_1829_example_1() { + let nums = vec![0, 1, 1, 3]; + let maximum_bit = 2; + + let result = vec![0, 3, 2, 3]; + + assert_eq!(Solution::get_maximum_xor(nums, maximum_bit), result); + } + + #[test] + fn test_1829_example_2() { + let nums = vec![2, 3, 4, 7]; + let maximum_bit = 3; + + let result = vec![5, 2, 6, 5]; + + assert_eq!(Solution::get_maximum_xor(nums, maximum_bit), result); + } + + #[test] + fn test_1829_example_3() { + let nums = vec![0, 1, 2, 2, 5, 7]; + let maximum_bit = 3; + + let result = vec![4, 3, 6, 4, 6, 7]; + + assert_eq!(Solution::get_maximum_xor(nums, maximum_bit), result); + } +}