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; } }
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; } }
原文:https://www.cnblogs.com/HuangYJ/p/12830321.html