只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/single-number
//解题思路:数组中有一个是单独存在的,剩下的是成双成对出现的,使用异或。
//0⊕a=a a⊕a=0,所以成对出现的都属异或成0,最后是0⊕b=b,返回
class Solution {
public int singleNumber(int[] nums) {
int ans=0;
for(int i = 0;i<nums.length;i++){
ans^=nums[i];
}
return ans;
}
}
补充
异或基础知识
异或运算符合交换律和结合律,及a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b
System.out.println("结果为:"+(9^5));
结果为:12
System.out.println("结果为:"+(2^5^2));
结果为:5
异或运算是使用二进制进行操作,0⊕1=1,0⊕0=0,1⊕1=0.
9是1001,5是0101,使用异或后,进行二进制计算为1100,也就是十进制的12.