[LeetCode] Minimum Removals to Achieve Target XOR

3877. Minimum Removals to Achieve Target XOR

You are given an integer array nums and an integer target.

You may remove any number of elements from nums (possibly zero).

Return the minimum number of removals required so that the bitwise XOR of the remaining elements equals target. If it is impossible to achieve target, return -1.

The bitwise XOR of an empty array is 0.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class Solution {
bool on(int a, int i) {
return ((a>>i)&1);
}
public:
int minRemovals(vector<int>& nums, int target) {
sort(rbegin(nums), rend(nums));
while(nums.size() and nums.back() == 0) nums.pop_back();
if(nums.empty()) return !target ? 0 : -1;
reverse(begin(nums), end(nums));
unordered_map<int,int> dp{{0,0}};
for(int i = 30; i >= 0; i--) {
if(dp.size() == 0) return -1;
unordered_map<int,int> freq;
while(nums.size() and on(nums.back(),i)) {
freq[nums.back()]++;
nums.pop_back();
}
unordered_map<int,int> dpp;
bool ok = on(target,i);
unordered_map<int,int> bits[2];
if(freq.size() == 0) {
bits[0][0] = 0;
} else {
unordered_map<int,int> now{{0,0}};
for(auto& [k,v] : freq) {
int c = v % 2 == 0;
unordered_map<int,int> cur;
for(auto& [kk,vv] : now) {
if(cur.count(kk^k)) cur[kk^k] = min(cur[kk^k], vv + c);
else cur[kk^k] = vv + c;

if(cur.count(kk)) cur[kk] = min(cur[kk], vv + !c);
else cur[kk] = vv + !c;
}
swap(now,cur);
}
for(auto& [k,v] : now) bits[on(k,i)][k] = v;
}
unordered_map<int,int> origin[2];
for(auto& [k,v] : dp) origin[on(k,i)][k] = v;
int mask = (1<<i) - 1;
for(int a : {0,1}) for(int b : {0,1}) {
if((a ^ b) != ok) continue;
for(auto& [k1,v1] : bits[a]) for(auto& [k2,v2] : origin[b]) {
int k = (k1 ^ k2) & mask;
if(dpp.count(k)) dpp[k] = min(dpp[k], v1 + v2);
else dpp[k] = v1 + v2;
}
}
swap(dp,dpp);
}
if(dp.empty()) return -1;
return dp.begin()->second;
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2026/09/04/PS/LeetCode/minimum-removals-to-achieve-target-xor/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.