两个数组的交集||

LeetCode链接

题目:

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

 【题目分析】

根据实例得知,这个交集是不用去重的。

与此题类似,关键的不同之处在于如何取到相交重复元素的最小值。

两个数组的交集_兜兜转转m的博客-CSDN博客

步骤:

【第一步】定义map,将数组1存入map,key为数组的值,value为出现的次数

【第二步】定义List数组作为返回值,由于不知道数组的长度,因此定义可变数组接收结果。

【第三步】遍历数组2,判断是否有交集,如果有交集则,则将value值减一,这样就可以得到,最小的交集次数。

【代码如下】

package hash;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class Intersect {
    public static void main(String[] args) {
        int[] num1 = {1, 2, 2, 1};
        int[] num2 = {1, 2, 2, 2};
        int[] intersect = intersect(num1, num2);
        System.out.println("intersect = " + Arrays.toString(intersect));
    }

    public static int[] intersect(int[] nums1, int[] nums2) {
        // 1 将数组1存入到map中,key 存数组的值, value存出现的次数
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i : nums1) {
            map.put(i, map.getOrDefault(i, 0) + 1);
        }
        // 2.定义List 存储相交的结果
        List<Integer> res = new ArrayList<>();
        for (int i : nums2) {
            if (map.getOrDefault(i, 0 ) > 0) {
                res.add(i);
                map.put(i,map.get(i) - 1);
            }
        }
        // 3.得到输出
        int[] result = new int[res.size()];
        for (int i = 0; i < result.length; i++) {
            result[i] = res.get(i);
        }
        return result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兜兜转转m

一毛钱助力博主实现愿望

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值