弟中弟的Leetcode总结——数组类(十一)
题目描述
Single Number
Given a non-empty 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?
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
思路
这道题本身我的思路是想用访问表来记录每个数字出现的次数来做,可以达到线性时间的要求。但是题目提示说可以不需要额外的内存,因此需要换别的思路。
在讨论区看到了大神的思路——位运算XOR。当两个相同的数做XOR运算时,结果为0。当0与其它数做XOR运算的时候,结果就是那个数。因此只需要将数组中的所有数全部进行位运算,最后的结果一定就是单独的那个数。
代码(C)
int singleNumber(int* nums, int numsSize) {
int ans=0;
for(int i=0;i<numsSize;i++){
ans^=nums[i];
}
return ans;
}