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 <= 10000 <= start <= 1000n == 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 <= 10000 <= start <= 1000n == 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;
};
