题源:
描述
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
数据范围:数组长度2≤n≤1000,数组中每个数的大小0<val≤1000000
要求:空间复杂度O(1),时间复杂度O(n)
提示:输出时按非降序排列。
示例1
输入:
[1,4,1,6]
返回值:
[4,6]
说明:
返回的结果中较小的数排在前面
示例2
输入:
[1,2,3,3,2,9]
返回值:
[1,9]
思路:
哈希表,遍历寻找出现频率,然后放入答案数组中,最终返回数组即可。
题解:
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型vector
* @return int整型vector
*/
vector<int> FindNumsAppearOnce(vector<int>& array) {
vector<int> ans;
// write code here
unordered_map<int,int> mp;
//用哈希表统计出现频率
for(int i = 0;i < array.size();i++){
mp[array[i]]++;
}
//找出只出现一次的值,把他放入ans数组中
for(int i = 0;i < array.size();i++){
if(mp[array[i]] == 1)
ans.push_back(array[i]);
}
//从小到大排序,并且返回即可
sort(ans.begin(),ans.end());
return ans;
}
};