JZ40 数组中只出现一次的数字
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路
创建一个set(或者unordered_set),遍历数组,如果set中有,那就删除set中的这个数字;如果没有,就加入;最终set中留下的就是两个只出现一次的数字。
这里一开始遇到了一个问题,怎么去取set中的数字呢(注意不能用set[i]去取),我这里是定义了一个迭代器begin
代码
class Solution {
public:
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
unordered_set<int> dataSet;
for (int i = 0; i < data.size(); i++)
{
if (dataSet.count(data[i]) == 1)
{
dataSet.erase(data[i]);
}
else
{
dataSet.insert(data[i]);
}
}
unordered_set<int>::iterator it = dataSet.begin();
*num1 = *it;
*num2 = *(++it);
}
};
查看9道真题和解析