1 minute read

Problem Statement

leetcode problem link

My Solution [Accepted]

public class Solution {
    public IList<IList<int>> FindDifference(int[] nums1, int[] nums2) {
        var hashSet1 = new HashSet<int>(nums1);
        var hashSet2 = new HashSet<int>(nums2);
        var ans0 = new List<int>();
        var ans1 = new List<int>();

        foreach(var num in nums1) {
            if (!hashSet2.Contains(num) && !ans0.Contains(num)){
                ans0.Add(num);
            }
        }
        foreach(var num in nums2) {
            if (!hashSet1.Contains(num) && !ans1.Contains(num)){
                ans1.Add(num);
            }
        }

        return new List<IList<int>> { ans0, ans1 };
    }
}

Improve C#

public class Solution {
    public IList<IList<int>> FindDifference(int[] nums1, int[] nums2) {
        var set1 = new HashSet<int>(nums1);
        var set2 = new HashSet<int>(nums2);

        // Create copies to avoid modifying original sets
        var diff1 = new HashSet<int>(set1);
        var diff2 = new HashSet<int>(set2);

        diff1.ExceptWith(set2);  // elements exclusive to nums1
        diff2.ExceptWith(set1);  // elements exclusive to nums2

        return new List<IList<int>> {
            diff1.ToList(),
            diff2.ToList()
        };
    }
}

Editorial

class Solution {
public:
    // Returns the elements in the first arg nums1 that don't exist in the second arg nums2.
    vector<int> getElementsOnlyInFirstList(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> onlyInNums1;

        // Store nums2 elements in an unordered set.
        unordered_set<int> existsInNums2;
        for (int num : nums2) {
            existsInNums2.insert(num);
        }

        // Iterate over each element in the list nums1.
        for (int num : nums1) {
            if (existsInNums2.find(num) == existsInNums2.end()) {
                onlyInNums1.insert(num);
            }
        }

        // Convert to vector.
        return vector<int> (onlyInNums1.begin(), onlyInNums1.end());
    }

    vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) {
        return {getElementsOnlyInFirstList(nums1, nums2), getElementsOnlyInFirstList(nums2, nums1)};
    }
};