5268. 找出两数组的不同
示例 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]。
思路:创建两列表用于存放两数组,使用contains()该元素判断是否在另一数组中,若不在则存入list中。
代码:
class a{
public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
List<List<Integer>> list=new ArrayList<List<Integer>>();
int len1=nums1.length,len2=nums2.length;
List resultList1 = new ArrayList<>(nums1.length);
for (int s : nums1) {
resultList1.add(s);
}
List resultList2 = new ArrayList<>(nums2.length);
for (int s : nums2) {
resultList2.add(s);
}
list.add(new LinkedList<>());
list.add(new LinkedList<>());
for(int i =0;i<len1;i++) {
if(!resultList2.contains(nums1[i])&&!list.get(0).contains(nums1[i])) {
list.get(0).add(nums1[i]);
}
}
for(int i =0;i<len2;i++) {
if(!resultList1.contains(nums2[i])&&!list.get(1).contains(nums2[i])){
list.get(1).add(nums2[i]);
}
}
return list;
}
}
优化代码
参考链接
class Solution {
public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
List<List<Integer>> res = new ArrayList();
Set<Integer> set1 = new HashSet();
Set<Integer> set2 = new HashSet();
for(int num : nums1) set1.add(num);
for(int num : nums2) {
set2.add(num);
if(set1.contains(num)) set1.remove(num);
}
for(int num : nums1) {
if(set2.contains(num)) set2.remove(num);
}
res.add(new ArrayList(set1));
res.add(new ArrayList(set2));
return res;
}
}