LeetCode 2215. 找出两数组的不同

LeetCode 2215. 找出两数组的不同

描述

给你两个下标从 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]。

示例 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] = [] 。

提示:

1 <= nums1.length, nums2.length <= 1000
-1000 <= nums1[i], nums2[i] <= 1000

题解

  • 创建两个HashMap对象记录数字
  • 遍历nums1 和nums2收集数据到对应Hash表
  • 根据条件判断是否存储到对应answer中
  • 别忘了重复的情况,这里可以创建一个大小为2001的数组标记是否已经将数字添加到answer中(nums的范围为 -1000 <= nums1[i], nums2[i] <= 1000
class Solution {
    public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
        List<List<Integer>> list = new ArrayList<>();
        List<Integer> answer1 = new ArrayList<>();
        List<Integer> answer2 = new ArrayList<>();
        HashMap <Integer,Integer> map1 = new HashMap<>();
        HashMap <Integer,Integer> map2 = new HashMap<>();
        // -1000 1000
        int [] flag = new int[2001];
        for(int num:nums1){
            map1.put(num,0);
        }
        for(int num:nums2){
            map2.put(num,0);
            if(!map1.containsKey(num)){
                // nums2 存在 nums1 不存在
                // answer2
                if(flag[num+1000]==1){
                    continue;
                }
                answer2.add(num);
                flag[num+1000]=1;
            }
        }
        for(int num:nums1){
            if(!map2.containsKey(num)){
                if(flag[num+1000]==1){
                    continue;
                }
                answer1.add(num);
                flag[num+1000]=1;
            }
        }
        list.add(answer1);
        list.add(answer2);
        return list;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值