-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1829. Maximum XOR for Each Query: AC
- Loading branch information
Showing
2 changed files
with
104 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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: | ||
* <ol> | ||
* 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. | ||
* </ol> | ||
* 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<i32>, maximum_bit: i32) -> Vec<i32> { | ||
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); | ||
} | ||
} |