LeetCode 442.Find All Duplicates in an Array

来源:互联网 发布:java连接池配置 编辑:程序博客网 时间:2024/06/06 11:44

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数组

代码如下:

#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;}
原创粉丝点击