type
status
date
slug
summary
tags
category
icon
password
创建时间
Jan 22, 2025 04:34 AM
给你两个整数,
n
和 start
。数组
nums
定义为:nums[i] = start + 2*i
(下标从 0 开始)且 n == nums.length
。请返回
nums
中所有元素按位异或(XOR)后得到的结果。位运算——异或
模拟做法
位运算用法
记 为异或运算,异或运算满足以下性质:
- ,;
- (交换律);
- (结合律);
- (自反性);
- ,有 。
- 当 为偶数时, 和 只有最低位不同,;
在本题中,我们需要计算 。
分析:
当 是偶数时, 也是偶数,这些数的最低位都是 ,因此 ,最低位就是 0;
当 是奇数时, 也是奇数,这些数的最低位都是 1 ,因此 最后不确定,需要根据 的个数来判定。也就是当 是偶数时,最后为 ;当 是奇数时,最后为 。
现在,我们抛去最后一位看,设 ,则
最后,通过变形(参考 灵茶山艾府 ),我们得到
根据异或运算的性质 5,我们发现,每四组异或为 。因此, 根据模 4 的结果,进行讨论:
- 当 时,有 个数,正好凑成 组;
- 当 时,有 个数,剩下 、 、 三个数, 是这一组的开头,一定是 4 的倍数,是偶数。根据性质 6,有 。而 也是偶数,因此 ;
- 当 时,有 个数,剩下两个数,同理, ;
- 当 时,有 个数,剩下一个数,也就是 。
到 的异或和为,可以把异或和运算简化为数学表达: