Description
You are given an integer array nums
and an integer k
.
Your task is to partition nums
into k
non-empty subarrays. For each subarray, compute the bitwise XOR of all its elements.
Return the minimum possible value of the maximum XOR among these k
subarrays.
Β
Example 1:
Input: nums = [1,2,3], k = 2
Output: 1
Explanation:
The optimal partition is [1]
and [2, 3]
.
- XOR of the first subarray is
1
. - XOR of the second subarray is
2 XOR 3 = 1
.
The maximum XOR among the subarrays is 1, which is the minimum possible.
Example 2:
Input: nums = [2,3,3,2], k = 3
Output: 2
Explanation:
The optimal partition is [2]
, [3, 3]
, and [2]
.
- XOR of the first subarray is
2
. - XOR of the second subarray is
3 XOR 3 = 0
. - XOR of the third subarray is
2
.
The maximum XOR among the subarrays is 2, which is the minimum possible.
Example 3:
Input: nums = [1,1,2,3,1], k = 2
Output: 0
Explanation:
The optimal partition is [1, 1]
and [2, 3, 1]
.
- XOR of the first subarray is
1 XOR 1 = 0
. - XOR of the second subarray is
2 XOR 3 XOR 1 = 0
.
The maximum XOR among the subarrays is 0, which is the minimum possible.
Β
Constraints:
1 <= nums.length <= 250
1 <= nums[i] <= 109
1 <= k <= n
Solution
Python3
class Solution:
def minXor(self, nums: List[int], k: int) -> int:
N = len(nums)
@cache
def go(i, k):
if i == N: return 0
if N - i < k or k <= 0:
return inf
xor = 0
res = inf
for j in range(i, N - k + 1):
xor ^= nums[j]
res = min(res, max(xor, go(j + 1, k - 1)))
return res
return go(0, k)