1. Per-Query Linear Scan
Intuition
Loop over each query [x, m]. Initialize maxXor = -1. Loop through all numbers in nums. If num <= m, update maxXor = max(maxXor, x ^ num). Append maxXor to output.
When to apply: Basic baseline check.
Algorithm
- Step 1: Loop each query
[x, m]. - Step 2: Initialize
currMax = -1. - Step 3: For each
numinnums: ifnum <= m, updatecurrMax = max(currMax, x ^ num). - Step 4: Append
currMaxto result list.
#include <iostream>#include <vector>#include <algorithm>using namespace std; class Solution {public: vector<int> maximizeXor(vector<int>& nums, vector<vector<int>>& queries) { vector<int> ans; for (const auto& q : queries) { int x = q[0], m = q[1]; int currMax = -1; for (int num : nums) { if (num <= m) { currMax = max(currMax, x ^ num); } } ans.push_back(currMax); } return ans; }}; int main() { Solution sol; vector<int> nums = {0, 1, 2, 3, 4}; vector<vector<int>> queries = {{3, 1}, {1, 3}, {5, 6}}; auto res = sol.maximizeXor(nums, queries); for (int v : res) cout << v << " "; cout << endl; return 0;}Time & Space Complexity
- Time complexity:
O(Q * N)— Must iterate all N numbers for each of the Q queries. - Space complexity:
O(1)— Stores output array.
Why Brute Force Doesn't Scale:
With 100,000 queries and 100,000 numbers, checking all valid numbers times out by several orders of magnitude.
Offline sorting loads each element into the Trie once, answering all 100,000 queries in ~120ms.