349--取两个数组的交集

问题描述:

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
说明:

输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。

答案:

1,双重循环 13ms
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        //1,将两个数组中相同元素放入list
        List list = new ArrayList();
        for(int i = 0; i < nums1.length; i++){
            for ( int j = 0; j < nums2.length; j++){
                if(nums1[i]==nums2[j]){
                    list.add(nums1[i]);
                }
            }
        }
        //2,利用set进行去重
        Set<Integer> set = new HashSet<Integer>();
        set.addAll(list);
        //3,遍历set重装数组
        int[] result = new int[set.size()];
        int s = 0;
        Iterator<Integer> iterator = set.iterator();
        while (iterator.hasNext()){
            result[s]=iterator.next();
            s++;
        }
        return result;

    }

}
2,利用set进行去重 8ms
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        //1,对数组1进行set去重
        Set<Integer> set1 = new HashSet<Integer>();
        for(int i : nums1){
            set1.add(i);
        }
        //2,定义set2存放数组2中重复的数据
        Set<Integer> set2 = new HashSet<Integer>();
        for(int i : nums2){
            if(set1.contains(i)){
                set2.add(i);
            }
        }
        //3,将结果set放入数组中
        Iterator<Integer> iterator = set2.iterator();
        int s = 0;
        int[] result = new int[set2.size()];
        while (iterator.hasNext()){
            result[s]=iterator.next();
            s++;
        }
        return result;

    }

}
3,利用map 8ms
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
          //1,将数组1中的数据放入map1(元素,本数组中出现的次数)中
        Map<Integer,Integer> map1 = new HashMap<>();
        for(int i : nums1){
            int key = i;
            if(map1.containsKey(key)){
                int s = map1.get(key);
                s++;
                map1.put(key,s);
            }else{
                map1.put(key,1);
            }
        }
        //2,遍历数组2中的数据,判断map1中的key是否与数组2中的数据相等,如果相等,将数据放入Set中
        Set<Integer> set = new HashSet<>();
        for(int i : nums2){
            if(map1.containsKey(i)){
                set.add(i);
            }
        }
        //3,将set中的数据放入结果数组中
        int[] result = new int[set.size()];
        int i = 0;
        Iterator<Integer> iterator = set.iterator();
        while (iterator.hasNext()){
            result[i]=iterator.next();
            i++;
        }

        return result;
    }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值