Unique Elements

/* 

给两个list, l1, l2。 
返回两个list,第一个list是l1里的有但l2里没有的元素,
第二个list是l2有但是l1没有的元素。(元素可以是数字,也可以是string)

For example:
l1 = [1,2,3,4,5]
l2 = [2,3,4,6,7]
return [1,5], [6,7]

Duplicates?

*/

#include <vector>
#include <unordered_set>
#include <cassert>
#include <iostream>

using namespace std;

// Time: O(m+n), Space: O(m+n)
vector<vector<int>> getNonOverlaps(vector<int>& l1, vector<int>& l2) {
    unordered_set<int> l1_set;
    unordered_set<int> overlap;

    int m = l1.size();
    for (int i = 0; i < m; i++) {
        l1_set.insert(l1[i]);
    }

    int n = l2.size();
    for (int i = 0; i < n; i++) {
        if (l1_set.count(l2[i])) {
            overlap.insert(l2[i]);
        }
    }

    vector<int> v1;
    vector<int> v2;
    for (int i = 0; i < m; i++) {
        if (!overlap.count(l1[i])) {
            v1.push_back(l1[i]);
        }
    }
    for (int i = 0; i < n; i++) {
        if (!overlap.count(l2[i])) {
            v2.push_back(l2[i]);
        }
    }

    return {v1, v2};
}

int main() {
    vector<int> l1 {1, 2, 3, 4, 5};
    vector<int> l2 {2, 3, 4, 6, 7};
    vector<vector<int>> res = getNonOverlaps(l1, l2);
    for (int i = 0; i < res[0].size(); i++) {
        cout << res[0][i] << " ";
    }
    cout << endl;

    for (int i = 0; i < res[1].size(); i++) {
        cout << res[1][i] << " ";
    }
    cout << endl;

    return 0;
}

Last updated