两个数组的交集I
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
解题思路:
HashSet有着元素不重复、不注重顺序的特点,因此先对某一整数数组排除重复元素,后使用Set集合的contains方法与另一整数数组进行元素比较。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
//创建集合set1和set2
//对数组nums1和nums2分别进行遍历,将元素加入到集合中
HashSet<Integer> set1 = new HashSet<>();
HashSet<Integer> set2 = new HashSet<>();
for(int i:nums1){
set1.add(i);
}
for(int i:nums2){
//判断集合1中的元素是否包含数组nums2中的元素,若包含则将元素加入到集合set2中
if(set1.contains(i)){
set2.add(i);
}
}
int[] nums = new int[set2.size()];
int j=0;
for(int i:set2){
nums[j]=i;
j++;
}
return nums;
}
}
两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
我们可以不考虑输出结果的顺序。
解题思路:
1.创建HashMap记录一个给定数组中的元素以及对应的个数
2.遍历另一个数组和HashMao中记录的数据比较,构建出交集数组
主要需要考虑两个数组中相等的元素以及每个相等元素对应的个数
class Solution {
//创建HashMap记录一个给定数组中的元素以及对应的个数
//遍历另一个数组和HashMao中记录的数据比较,构建出交集数组
public int[] intersect(int[] nums1, int[] nums2) {
//将长度短的数组换到前面
if(nums1.length > nums2.length){
return intersect(nums2,nums1);
}
//创建HashMap记录nums1中每个元素出现的次数
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int num:nums1){
int count = map.getOrDefault(num,0)+1;
map.put(num,count);
}
int[] ans = new int[nums1.length];
int index=0;
//遍历数组nums2中的元素,在HashMap中个数大于0则记录
for (int num:nums2){
int count = map.getOrDefault(num,0);
if(count >0){
ans[index++]=num;
count--;
if(count >0){
map.put(num,count);
}else{
map.remove(num);
}
}
}
//遍历完成后返回重复元素长度的结果数组
return Arrays.copyOfRange(ans,0,index);
}
}