find out the duplicate number from the array of numbers
// use sorting and unordered_set
vector<int> find_duplicate_numbers(vector<int> &nums) {
vector<int> res;
if(nums.empty()) return res;
unordered_set<int> se;
sort(nums.begin(), nums.end());
for(int i=1; i<nums.size()-1; ++i) {
if(nums[i] == nums[i-1] || nums[i] == nums[i+1])
se.insert(nums[i]);
}
for(auto i : se) res.push_back(i);
return res;
}
// use hash, better.
vector<int> find_duplicate_numbers(vector<int> &nums) {
vector<int> res;
if(nums.empty()) return res;
unordered_map<int, int> mp;
for(auto i : nums) mp[i]++;
for(auto p : mp) {
if(p.second > 1)
res.push_back(p.first);
}
return res;
}