题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
代码1:
int singleNumber(int* nums, int numsSize){
for(int i=0;i<numsSize;i++){
for(int j=0;j<numsSize;j++){
if(i!=j&&nums[i]==nums[j]){
break;
}
if(j==numsSize-1){
return nums[i];
}
}
}
return 0;
}
思路1:
暴力求解,定义字母i与j为数组下标,使用两层for循环嵌套去遍历出只出现一次的数。
运行结果1:
代码2:
int singleNumber(int* nums, int numsSize){
int a=0;
for(int i=0;i<numsSize;i++){
a=a^nums[i];
}
return a;
}
思路2:
位运算求解,根据异或运算的特性,任意一个数和0异或仍然为自己,且任意一个数和自己异或是0。就代表着如果将数组中的所有元素依次进行异或运算,最后的得数就是那个单独的数。
运行结果: