问题描述:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
不使用额外的空间,并且时间复杂度为线性。输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4解题答案:
答案是使用位运算。对于这道题,可使用异或运算异或运算有以下三个性质。
1.任何数和0做异或运算,结果仍然是原来的数
2.任何数和其自身做异或运算,结果是0
3.异或运算满足交换律和结合律参考:链接:https://leetcode-cn.com/problems/single-number
代码如下:
class Alg136 {
public int singleNumber(int[] nums) {
int single = 0;
for (int num : nums) {
single ^= num;
}
return single;
}
public static void main(String[] args) {
int[] array=new int[]{4,1,2,1,2};
Alg136 alg136=new Alg136();
int res = alg136.singleNumber(array);
System.out.println(res);
}
}