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