DeepSeek LeetCode 3277. 查询子数组最大异或分数 JavaScript实现
JavaScript 实现
```javascript
var maximumSubarrayXor = function(nums, queries) {
const n = nums.length;
// xorScore[i][j]:子数组 nums[i..j] 的异或分数
const xorScore = Array.from({ length: n }, () => new Array(n).fill(0));
// maxScore[i][j]:nums[i..j] 范围内所有子数组的最大异或分数
const maxScore = Array.from({ length: n }, () => new Array(n).fill(0));
// 长度为1的区间
for (let i = 0; i < n; i++) {
xorScore[i][i] = nums[i];
maxScore[i][i] = nums[i];
}
// 按区间长度递增递推
for (let len = 2; len <= n; len++) {
for (let i = 0; i + len - 1 < n; i++) {
const j = i + len - 1;
// 异或分数 = 左区间分数 XOR 右区间分数
xorScore[i][j] = xorScore[i][j - 1] ^ xorScore[i + 1][j];
// 最大值 = max(当前区间分数, 左区间最大值, 右区间最大值)
maxScore[i][j] = Math.max(
xorScore[i][j],
maxScore[i][j - 1],
maxScore[i + 1][j]
);
}
}
// 回答所有查询
return queries.map(([l, r]) => maxScore[l][r]);
};
```
---
思路说明
· 递推公式:
f(i, j) = f(i, j-1) XOR f(i+1, j),其中 f(i,i) = nums[i]。
这来源于每次操作将相邻元素异或并收缩数组,最终结果等价于这个递推。
· 区间最大值:
在 [i, j] 内任意子数组的最大异或分数 =
max( f(i, j), maxScore[i][j-1], maxScore[i+1][j] )。
· 遍历顺序:按区间长度从小到大,确保依赖的子区间已计算。
---
复杂度
指标 复杂度
时间复杂度 O(n² + q)
空间复杂度 O(n²)
其中 n ≤ 2000,q ≤ 10⁵,每个查询 O(1) 回答。
更多推荐



所有评论(0)