原题链接
不要自卑,去提升实力
互联网行业谁技术牛谁是爹
如果文章可以带给你能量,那是最好的事!请相信自己
加油o~
136.只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
解题思路:
方法1:利用位运算符比较强大
利用异或运算法
性质(1):0与任何数异或都得另外的那个数
性质(2):1异或任何数=任何数取反
性质(3):满足交换律和结合律
1 xor 2 xor 3 xor 2 = (1 xor 1) xor (2 xor 2) xor 3 = 0 xor 0 xor 3 = 0 xor 3 = 3
性质(4):判断两个数是否相等可以用a异或b==0
性质(5):交换两个数可以
a=a异或b
b=b异或a
a=a异或b方法2:
因为每个元素最多出现两次,可以利用set特性
当添加重复元素时,第二次会添加失败,说明set中已有相同元素,所以调用方法删除它
最后利用迭代器返回集合中第一个即为答案
代码:
方法1:
方法2:
执行结果: