Given an array of integers, every element appears twice except for one. Find that single one.
在一个数组中,每个数字都有另一个与之相同,只有一个例外,请找出它。
一、我的方法(即最笨的方法):
把每个数字都检索一遍,检索不到相同的就输出。
从数组第一个数字开始,从后往前检索,一直到被检索数字,如果发现两个数字编号相同则输出。否则检索数组的第二个数字,以此循环。
程序如下:
int singleNumber(int* nums, int numsSize) {
if(numsSize==1)
return nums[0];
else
for(int i=0; i
{
for(int j=numsSize-1; j>i; j--)
if(i==j)
return nums[i];
}
}
二、Genius的办法(评论是这么说的,看完我也表示只有这个词可以形容。。。)
先是百度百科:
异或,英文为exclusive OR,或缩写成xor
异或是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。
其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
过程:
令result变量为0,将它与数组中每个量进行异或运算,再赋值给result。一个数与0异或仍是它本身,两个相同的数异或为0。因此,如果result和两个相同的数异或之后,则值不变,仍为0。又因为异或运算满足交换律,因此最后result的值即为只进行了一次异或运算的数,即我们要找的单身狗。
Genius!!
int singleNumber(int* nums, int numsSize) {
int result = 0;
for(int i=0; i
result^= nums[i];
return result;
}