首页 > 编程语言 > 详细

LeetCode349. 两个数组的交集

时间:2020-05-05 13:40:35      阅读:71      评论:0      收藏:0      [点我收藏+]

LeetCode349.两个数组的交集  题目描述:

技术分享图片

 分析:使用集合

技术分享图片
import java.util.ArrayList; // 动态数组
import java.util.TreeSet; // 基于搜索树的集合类

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        TreeSet<Integer> set = new TreeSet<>();
        for(int num: nums1){
            set.add(num);  // 对nums1去重
        }
        
        ArrayList<Integer> list = new ArrayList<>();
        for(int num : nums2){
            if(set.contains(num)){
                list.add(num);
                set.remove(num);  // 把添加过的元素删除,下一轮就找不到这个元素了
            }
        }
        int[] res = new int[list.size()];
        for(int i = 0 ;i <list.size() ; i++){
            res[i] = list.get(i);
        }
        return res;

    }
}
Solution 1

 

LeetCode350. 两个数组的交集 II 题目描述:

技术分享图片

 技术分享图片

 

 分析:可以使用允许用重复元素的集合,也可以使用映射(元素,频次)

技术分享图片
import java.util.ArrayList;
import java.util.TreeMap; // 基于平衡二叉树的映射类
class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {

        TreeMap<Integer, Integer> map = new TreeMap<>();
        for(int num : nums1){
            if(!map.containsKey(num)){
                map.put(num, 1);
            }
            else{
                map.put(num, map.get(num) + 1);
            }
        }
        ArrayList<Integer> list = new ArrayList<>();
        for(int num : nums2){
            if(map.containsKey(num)){
                list.add(num);
                map.put(num, map.get(num) - 1);
                if(map.get(num) == 0){
                    map.remove(num);
                }
            }

        }
        int[] res = new int[list.size()];
        for(int i = 0 ; i < list.size(); i++){
            res[i] = list.get(i);
        }
        return res;

    }
}
Solution 1

 

LeetCode349. 两个数组的交集

原文:https://www.cnblogs.com/HuangYJ/p/12830321.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!