牛客算法刷题-BM52 数组中只出现一次的两个数字
描述
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
数据范围:2 ≤ \leq ≤n ≤ 1000 \leq1000 ≤1000,数组中每个数的大小0 ≤ \leq ≤n ≤ 1000000 \leq1000000 ≤1000000。
要求:空间复杂度 O(1),时间复杂度 O(n)。
提示:输出时按非降序排列。
示例1
输入:[1,4,1,6]
返回值:[4,6]
说明:返回的结果中较小的数排在前面
示例2
输入:[1,2,3,3,2,9]
返回值:[1,9]
思路:
对于查找类的题目,可以先思考用哈希表的方式来解决,对于数组中的数字,进行哈希表查找,如果找到了,则哈希表中的元素个数+1,最后从哈希表中返回元素个数=1的键(key)。
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型vector
*/
vector<int> FindNumsAppearOnce(vector<int>& array) {
// write code here
map<int,int>hash;//定义hashmap,hashmap中会自动进行升序排序
vector<int>res;
int count=1;
for(int i=0;i<array.size();i++)
{
if(hash.find(array[i])==hash.end())//未找到对于key值
{
hash[array[i]]=1;//将[键,值]添加进hashmap中
}
else
{
hash[array[i]]=hash[array[i]]+1;//如果找到了键,则元素value+1
}
// cout<< array[i]<<" "<<hash[array[i]]<<endl;
}
for(int i=0;i<array.size();i++)
{
if(hash[array[i]]==1)//判断当元素value是否=1
{
res.push_back(array[i]);
}
}
sort(res.begin(),res.end());//排序输出
return res;
}