1486. 数组异或操作
1486. 数组异或操作
题目
You are given an integer n
and an integer start
.
Define an array nums
where nums[i] = start + 2 * i
(0-indexed) and n == nums.length
.
Return the bitwise XOR of all elements of nums
.
Example 1:
Input: n = 5, start = 0
Output: 8
Explanation: Array nums is equal to [0, 2, 4, 6, 8] where (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8.
Where "^" corresponds to bitwise XOR operator.
Example 2:
Input: n = 4, start = 3
Output: 8
Explanation: Array nums is equal to [3, 5, 7, 9] where (3 ^ 5 ^ 7 ^ 9) = 8.
Constraints:
1 <= n <= 1000
0 <= start <= 1000
n == nums.length
题目大意
给你两个整数,n
和 start
。
数组 nums
定义为:nums[i] = start + 2*i
(下标从 0 开始)且 n == nums.length
。
请返回 nums
中所有元素按位异或(XOR )后得到的结果。
示例 1:
输入: n = 5, start = 0
输出: 8
解释: 数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。
"^" 为按位异或 XOR 运算符。
示例 2:
输入: n = 4, start = 3
输出: 8
解释: 数组 nums 为 [3, 5, 7, 9],其中 (3 ^ 5 ^ 7 ^ 9) = 8.
示例 3:
输入: n = 1, start = 7
输出: 7
示例 4:
输入: n = 10, start = 5
输出: 2
提示:
1 <= n <= 1000
0 <= start <= 1000
n == nums.length
解题思路
题目要求我们从一个数组生成规则 nums[i] = start + 2 * i
,然后对该数组的所有元素执行按位异或操作。可以在遍历过程中使用一个累积变量 res
存储结果,直接更新,而不需要显式生成数组。
- 初始化结果变量
res
为0
。 - 遍历从
0
到n-1
:- 计算当前值
nums[i] = start + 2 * i
。 - 将
nums[i]
与res
按位异或。
- 计算当前值
- 返回
res
。
复杂度分析
- 时间复杂度:
O(n)
,遍历n
次,每次计算和异或操作为常数时间。 - 空间复杂度:
O(1)
,使用常数个变量,没有额外的空间消耗。
代码
/**
* @param {number} n
* @param {number} start
* @return {number}
*/
var xorOperation = function (n, start) {
let res = 0;
for (let i = 0; i < n; i++) {
res ^= start + 2 * i;
}
return res;
};