1. 问题分析与解法思路
LeetCode第1486题"数组异或操作"是一个典型的位运算练习题目。题目要求我们模拟一个数组的构建过程,并对数组中的所有元素进行按位异或(XOR)运算。具体来说,我们需要:
- 构建一个长度为n的数组nums,其中nums[i] = start + 2*i
- 对数组中的所有元素进行按位异或运算
- 返回最终的异或结果
1.1 暴力解法分析
最直观的解法就是按照题目描述,先构建数组,然后遍历数组进行异或运算。这种解法的时间复杂度是O(n),空间复杂度也是O(n),因为需要存储整个数组。
然而,仔细观察题目后可以发现,我们其实不需要真正构建这个数组。因为异或运算有一个重要特性:运算的顺序不影响最终结果(异或满足交换律和结合律)。这意味着我们可以直接在计算每个元素的同时进行异或运算,而不需要存储中间结果。
1.2 优化思路
基于上述观察,我们可以优化空间复杂度到O(1),具体做法是:
- 初始化结果为0(因为任何数与0异或都等于它本身)
- 在循环中直接计算当前元素的值
- 将当前元素与结果进行异或运算
- 更新结果值
这种优化不仅减少了内存使用,而且保持了相同的时间复杂度O(n),因为仍然需要遍历n个元素。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Python解法详解
2.1 代码实现
python复制class Solution:
def xorOperation(self, n: int, start: int) -> int:
result = 0 # 初始化结果为0
for i in range(n):
num = start + 2 * i # 计算当前元素值
result ^= num # 与结果进行异或运算
return result
2.2 代码解析
- 初始化结果:
result = 0,因为0是异或运算的单位元(任何数与0异或都等于它本身) - 循环计算:使用for循环遍历0到n-1的范围
- 计算当前元素值:
num = start + 2 * i - 与结果进行异或运
- 计算当前元素值:
