5268. 找出两数组的不同

题目

给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 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]。

思路:创建两列表用于存放两数组,使用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;
    }
}

你可能感兴趣的:(java,力扣)