java中的异或 (^)
例子力扣
136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
public static void main(String[] args) {
TestWk testWk = new TestWk();
int[] nums = {
2,4,4,2,1};
System.out.println(testWk.singleNumber(nums));
}
public int singleNumber(int[] nums) {
int ans = nums[0];
if (nums.length > 1) {
for (int i = 1; i < nums.length; i++) {
ans = ans ^ nums[i];
}
}
return ans;
//我们就是巧用异或运算符的规则,得出一个数和0异或还是自己,一个数和自己异或是0的原理。
}
分析
a^b ^ a = b
因为两个一样的异或一下就是0,所以这个题刚刚好就是2n个一样的,用这个题来当异或的例子真不错。