[算法][力扣350]两个数组的交集2
给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
public class TestSet001 { public static void main(String[] args) { int[] nums1 = {1, 2, 2, 1}; int[] nums2 = {2, 2, 2, 2, 2, 2, 2}; int[] ret = intersection(nums1, nums2); System.out.println(Arrays.toString(ret)); } public static int[] intersection(int[] nums1, int[] nums2) { // 统计nums1中每个元素出现的次数 HashMap<Integer, Integer> numMap = new HashMap<>(); for (int num : nums1) { numMap.put(num, numMap.getOrDefault(num, 0) + 1); } // 遍历nums2,求两个数组的交集 ArrayList<Integer> resultList = new ArrayList<>(); for (int num : nums2) { if (numMap.get(num) != null && numMap.get(num) > 0) { resultList.add(num); numMap.put(num, numMap.get(num) - 1); } } // 集和转数组 int[] ret = new int[resultList.size()]; int index = 0; for (Integer ele : resultList) { ret[index++] = ele; } return ret; } }