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

这篇博客介绍了一个Java方法,用于计算两个整数数组的交集。通过使用HashMap存储数组一中元素的频率,然后遍历数组二,根据HashMap记录的频率将交集元素添加到结果数组中。这种方法有效地减少了内存使用并确保了结果数组的正确性。

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

示例 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,生成一个新的数组。
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡壶子

你的鼓励奖是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值