题目:给两个下标从0开始的整数数组nums1和nums2,返回一个长度为2的列表answer,其中:
answer[0]是nums1中所有不存在于nums2中的不同整数组成的列表。
answer[1]是nums2中所有不存在于nums1中的不同整数组成的列表。
解题思路:
为了较快地判断一个数组的某个元素是否在另一个数组中存在,我们可以用哈希集合来存储数组的元素,并进行判断。具体而言,我们用哈希集合 set1
与 set2 存储数组 nums1 与 nums2 中所有不同的元素。
我们用长度为 2 的嵌套列表 res 来保存两数组中不存在于另一数组中的元素。我们首先遍历哈希集合 set1 的每个元素,判断其是否位于 set2 中,如果不在,则我们将它加入 res[0]\textit{res}[0]res[0] 中;随后我们同样地遍历哈希集合 set2 的每个元素,判断其是否位于 set1 中,如果不在,则加入 res[1] 中。这样,我们就得到了两数组中各自的不同元素。与此同时,由于哈希集合 set1 与 set2 中不存在重复元素,因此 res[0] 与 res[1] 也一定不存在重复元素。最终我们返回 res 作为答案即可。
class Solution {public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {HashSet<Integer> set1 = new HashSet<>();HashSet<Integer> set2 = new HashSet<>();for (int n : nums2) {set2.add(n);}for (int n : nums1) {set1.add(n);}for (int n : nums2) {set1.remove(n);}for (int n : nums1) {set2.remove(n);}return List.of(List.copyOf(set1), List.copyOf(set2));}
}