目录
349.两个数组的交集
350. 两个数组的交集 II
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] 也是可通过的
思路:
1.创建两个set集合,set1存储nums1中的元素,set2存nums2与num1的并集
2.创建数组,用foreach遍历set2集合,将set2中的元素赋给数组
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]
思路:
1.先对nums1、nums2进行排序
2.创建数组,数组长度为两个数组中长度最小的值
3.声明三个索引变量
4.主要算法:看图
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);}
}