目录
349.两个数组的交集
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:[4,9] 也是可通过的
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
// 遍历nums1与nums2中的元素
for (int num : nums1)
set1.add(num);
//遍历nums2,若set1已包含该数,则表明为交集数之一,将其添加至set2中
for (int num : nums2){
if(set1.contains(num))
set2.add(num);
}
//创建数组
int dp[] = new int[set2.size()];
int j = 0;
for(int num : set2)
dp[j++] = num;
return dp;
}
}
350. 两个数组的交集 II
给你两个整数数组 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]
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
//对nums1、nums2排序
Arrays.sort(nums1);
Arrays.sort(nums2);
//创建数组,且数组长度为nums1、nums长度中最小的那个
int[] dp = new int[Math.min(nums1.length,nums2.length)];
//声明三个索引
int index1 = 0,index2 = 0,index = 0;
while(index1 < nums1.length && index2 < nums2.length){
//当指针1指向的值大于指针2指向的值时,指针2往右移一位
if(nums1[index1] > nums2[index2])
index2++;
else if(nums1[index1] < nums2[index2])
index1++;
//当指针1指向的值等于指针2指向的值时,将该值添加至数组中
else{
dp[index] = nums1[index1];
//添加成功后,index1与index2都要往右移一位,索引index+1继续存储相等的元素
index++;
index1++;
index2++;
}
}
//copyOfRange()为复制部分,参数分别为(拷贝的数组对象,拷贝的起始位置,拷贝的结束位置)
return Arrays.copyOfRange(dp,0,index);
}
}