目录
原题描述
Single Number
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?
分析
最容易想到的方法是从第一位开始遍历,然后内层循环验证是否只出现一次,这种方法复杂度为O(n2),效率太低。题目提示用hashtable转化为线性复杂度,所以要利用hashtable的查找函数。
代码示例
class Solution {
public:
int singleNumber(vector<int>& nums) {
map<int, int> record;
for (vector<int>::iterator i = nums.begin(); i != nums.end(); ++i)
{
if (record.find(*i) == record.end())
record[*i] = 1;
else
++record[*i];
}
for (map<int, int>::iterator i = record.begin(); i != record.end(); ++i)
{
if (i->second == 1)
{
return i->first;
}
}
}
};