力扣上的题
给定两个数组 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.输出的结果有重复的元素(解决方法:用HashSet的add方法)
2.怎么把交集结果转化成整数数组并返回(这里不能单纯用一个数组接收,因为容易出现数组大小设置不当,出现末尾多个0的情况)
(AI回答:)
- 使用 Java 8 的 Stream API,将
commonNumSet
转换为一个流(stream()
),然后通过mapToInt(Integer::valueOf)
方法将流中的每个Integer
对象映射为int
类型的值(尽管这里Integer::valueOf
实际上是不必要的,因为mapToInt
需要一个ToIntFunction
,通常我们会使用Integer::intValue
来直接获取int
值)。但在这个上下文中,直接使用mapToInt(Integer::intValue)
会更合适。 - 最后,通过
toArray()
方法将流中的元素收集到一个新的整数数组中,并返回这个数组。
return set2.stream().mapToInt(Integer::intValue).toArray();
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer>set=new HashSet<Integer>();
Set<Integer>set1=new HashSet<Integer>();
Set<Integer>set2=new HashSet<Integer>();
for(int x:nums1){
set.add(x);
}
for(int x:nums2){
set1.add(x);
}
for(int x:set1){
if(!set.add(x)){
set2.add(x);
}
}
return set2.stream().mapToInt(Integer::intValue).toArray();
}
}
力扣上友友的思路:使用HashSet的contains方法要比用add方法判断要明智一些,这样可以少写一个HashSet
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer>set=new HashSet<Integer>();
Set<Integer>set1=new HashSet<Integer>();
for(int x:nums1){
set.add(x);
}
for(int x:nums2){
if(set.contains(x)){
set1.add(x);
}
}
return set1.stream().mapToInt(Integer::intValue).toArray();
}
}