136. Single Number
在情侣中找出单身狗,对单身狗暴击。
Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
既然是成对出现,那么应该可以通过排序将他们合并到一起,但是要线性时间的算法!
解1:使用字典,判断键是否已经在字典中,如果不在添加到字典中,然后第二次出现这个键值,那么删除字典中的这个键,因为题目中只有一条单身狗,所以删到最后只剩下单身狗了。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
single_dog = {}
for num in nums:
if not single_dog.has_key(num):
single_dog[num] = 1
else :
del single_dog[num]
return single_dog.keys()[0]
解2:
使用亦或运算,一个数与个本身亦或等于0
0和一个数亦或等于那么数本身
0 xor 0 = 0
0 xor 1 = 1
A XOR B XOR A = B
class Solution {
public:
int singleNumber(int A[], int n) {
for (int i = 1; i < n; ++i)
A[0] ^= A[i];
return A[0];
}
};