题目
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例 1 :
输入:nums = [2,2,1]
输出:1
示例 2 :
输入:nums = [4,1,2,1,2]
输出:4
示例 3 :
输入:nums = [1]
输出:1
代码
1.for循环结构解法:
int singleNumber(int* nums, int numsSize) {
for(int i=0;i<numsSize;i++){
printf("%d\n",nums[i]);
int count=0;
//将数组里的每个元素与当前元素对比要是相等,count++
for(int j=0;j<numsSize;j++){
if(nums[i]==nums[j]){
count++;
}
}
if(count==1){
return nums[i];
}
}
return 0;
}
2.异或符号解法:
int singleNumber(int* nums, int numsSize) {
int n=0;
for(int i=0;i<numsSize;i++){
n=n^nums[i];
}
return n;
}
异或:同零异一。
00000001
^ 00000010
——————
00000011
00000001
^ 00000001
——————
00000000
所以 [2,2,1]相互异或
2^2 ^1=0 ^ 1=1