2215.找出两数组的不同

发布于:2024-06-19 ⋅ 阅读:(136) ⋅ 点赞:(0)

给你两个下标从0开始的整数数组 nums1nums2 ,请你返回一个长度为2的列表 answer ,其中:
answer[0]nums1 中所有不存在于nums2中的不同整数组成的列表。answer[1]nums2 中所有不存在于 nums1 中的不同整数组成的列表。
注意:列表中的整数可以按任意顺序返回。

示例 1:

输入:nums1 = [1,2,3], nums2 = [2,4,6]
输出:[[1,3],[4,6]]
解释:
对于 nums1 ,nums1[1] = 2 出现在 nums2 中下标 0 处,然而 nums1[0] = 1 和 nums1[2] = 3 没有出现在 nums2 中。因此,answer[0] = [1,3]。
对于 nums2 ,nums2[0] = 2 出现在 nums1 中下标 1 处,然而 nums2[1] = 4 和 nums2[2] = 6 没有出现在 nums2 中。因此,answer[1] = [4,6]。

示例 2:

输入:nums1 = [1,2,3,3], nums2 = [1,1,2,2]
输出:[[3],[]]
解释:
对于 nums1 ,nums1[2] 和 nums1[3] 没有出现在 nums2 中。由于 nums1[2] == nums1[3] ,二者的值只需要在 answer[0] 中出现一次,故 answer[0] = [3]。
nums2 中的每个整数都在 nums1 中出现,因此,answer[1] = [] 。

解题思路

分析可得,answer里面不需要出现重复的,所以首先使用set容器去重,然后使用count函数进行判断,最后用vector<vector<int>> answer(2)存储就行了

class Solution {
public:
    vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) {
        vector<vector<int>> answer(2);
        unordered_set<int> set1, set2;
        //去重
        for (int i : nums1) {set1.insert(i);}
        for (int i : nums2) {set2.insert(i);}

        for (int i : set1) {
            if(!set2.count(i)){
                answer[0].push_back(i);
            }
        }

        for (int i : set2) {
            if(!set1.count(i)){
                answer[1].push_back(i);
            }
        }
        return answer;
    }
};

PS:set 容器中的 count() 函数用来确定一个特定元素在 set 中出现的次数。