LeetCode 442.Find All Duplicates in an Array

LeetCode 442.Find All Duplicates in an Array

Description:

Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements that appear twice in this array.
Could you do it without extra space and in O(n) runtime?

Example:

Input: [4,3,2,7,8,2,3,1]
Output: [2,3]

分析:

参考我的另一篇文章LeetCode 448.Find All Numbers Disappeared in an Array
hash[i]用来标记i是否在nums数组中出现过,然后判断hash[i]的真假将已经出现过的放入res数组中,返回res数组

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> res;
vector<bool> hash(nums.size() + 1, false);
for (int i = 0; i < nums.size(); i++) {
if (hash[nums[i]] == true) {
res.push_back(nums[i]);
}
else {
hash[nums[i]] = true;
}
}
return res;
}
};
int main() {
Solution s;
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
vector<int> temp = s.findDuplicates(nums);
for (int i = 0; i < temp.size(); i++) {
cout << temp[i] << " ";
}
return 0;
}
------本文结束感谢阅读------