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次的数。另外题目给定数组中可能有负数,简单起见,就新开两个数组分别记录非负数和负数出现的次数。算法复杂度为O(n)。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int a[10000],b[10000],r;
for(int i=0;i<10000;i++)
{
a[i]=0;
b[i]=0;
}
for(int i=0;i<nums.size();i++)
{
if(nums[i]>=0)
a[nums[i]]++;
else
{
b[nums[i]-2*nums[i]]++;
}
}
for(int i=0;i<nums.size();i++)
{
if(nums[i]>=0)
{
if(a[nums[i]]==1)
{
r=nums[i];
break;
}
}
else
{
if(b[nums[i]-2*nums[i]]==1)
{
r=nums[i];
break;
}
}
}
return r;
}
};