
LeetCode 1310 子数组异或查询[位运算 异或] HERODING的LeetCode之路
从预处理数组 使用取异或操作直接计算结果。
发布日期:2021-05-13 20:58:44
浏览次数:18
分类:精选文章
本文共 1024 字,大约阅读时间需要 3 分钟。
解决异或子数组查询问题的高效方法解析
在面对异或操作的子数组查询问题时,直接计算所有查询的异或结果可能会导致超时。一个更为高效的方法是预处理并存储中间结果,从而在查询时快速获取所需值。
具体来说,我们可以通过预处理步骤构建一个辅助数组total
。初始化时,total
的长度为输入数组的长度加1,初始值均为0。然后,我们依次计算从第一位到最后一位的异或值,将结果存储在total
数组中。
例如,假设输入数组为arr = [a_0, a_1, a_2, ... , a_n]
,则预处理结果数组total
将满足:
total[0] = 0
total[i] = total[i-1] ^ arr[i-1]
(i >= 1)
这样,在处理查询时,我们只需按照以下步骤进行:
total
中取出对应的值。关于代码实现,完整的Python代码如下:
class Solution: public: vector xorQueries(vector & arr, vector>& queries) { int len = arr.size(); vector total(len + 1, 0); for (int i = 1; i <= len; i++) { total[i] = total[i-1] ^ arr[i-1]; } vector ans; for (int i = 0; i < queries.size(); i++) { int left = queries[i][0]; int right = queries[i][1]; ans.push_back(total[right + 1] ^ total[left]); } return ans; }
这种方法通过预处理将每个查询的解算复杂度降低至O(1),使得整体时间复杂度为O(n + m),其中n是输入数组的长度,m是查询次数。这是一种非常高效的解决方案。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月08日 22时09分59秒