LeetCode初级-11-两个数组的交集

Posted 咖啡壶子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode初级-11-两个数组的交集相关的知识,希望对你有一定的参考价值。

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

示例 1:

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

示例 2:

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

说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。

package day20210814;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class 数组重复 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int []nums1= {4,9,5,4,4};
		int []nums2= {9,4,9,8,4,6};
		
		int num3[]=intersect(nums1,nums2);
		for(int num:num3) {
			System.out.println(num);
		}
	}
	public static int[] intersect(int [] nums1, int [] nums2) {
		//当数组一的长度大于数组二的长度时,交换数组一和数组二,减少内存的使用
		if(nums1.length>nums2.length) {
			return intersect(nums2,nums1);
		}
		//创建一个新的map集合
		Map<Integer,Integer> map=new HashMap<Integer,Integer>() ;
		//遍历数组一,统计数组一中每个数字出现的次数,并把数字以及该数字出现的次数增添到map集合里
		for(int num:nums1) {
			int count=map.getOrDefault(num, 0)+1;//统计num出现的次数
			map.put(num, count);
		}
		//定义一个长度和nums1一样的数组intersection,得到的数组最长也就是nums1的长度
			int [] intersection=new int[nums1.length];
			int index=0;//具体数组intersection的长度
			for(int num:nums2) {
				int count =map.getOrDefault(num, 0);//得到num出现的次数
				if(count >0) {
					intersection[index++]=num;//次数大于0,就把该数字添加到新数组中去
					count--;//nums1中该数字出现的次数减一
					if(count>0) {
						map.put(num, count);
					}else {
						map.remove(num);
					}	
				}
			}
			return Arrays.copyOfRange(intersection, 0, index);//将数组intersection,从下标0开始复制,复制到上标index,生成一个新的数组。
	}

}

以上是关于LeetCode初级-11-两个数组的交集的主要内容,如果未能解决你的问题,请参考以下文章

数据结构和算法LeetCode,初级算法-6两个数组的交集 II

leetcode官方《初级算法》题集(一)数组

LeetCode350. 两个数组的交集 II

LeetCode 349. 两个数组的交集

leetcode NO.349 两个数组的交集 (python实现)

leetcode349. 两个数组的交集