问题描述
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
解题思路
- 将两个数组都放入set中去重,在以size最小的遍历,在大的size中查找,有相同的就存起来,最后放入数组,返回
实现
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1==null||nums2==null){
return new int[0];
}
Set<Integer> set1 = new HashSet<Integer>();
Set<Integer> set2 = new HashSet<Integer>();
int len1 = nums1.length;
int len2 = nums2.length;
List<Integer> list =new ArrayList<Integer>();
for(int i=0;i<len1;i++){
set1.add( nums1[i]);
}
for(int i=0;i<len2;i++){
set2.add( nums2[i]);
}
if(len1<len2){
for(Integer integer :set1){
if(set2.contains(integer)){
list.add(integer);
}
}
}else {
for(Integer integer :set2){
if(set1.contains(integer)){
list.add(integer);
}
}
}
int[]res = new int[list.size()];
int r=0;
for(Integer in:list){
res[r]=in;
r++;
}
return res;
}
}
问题
关于set的Iterator
- Iterator.hasNext的方法,返回nextNode is not null
- Iterator.next();才是指针下移的操作,
//错误的例子
Iterator<Integer> it = set2.iterator();
while (it.hasNext()){
if(set1.contains(it)){//首先,应该it不是integer ,是Iterator对象,改判断永远为false,指针不下移
res[r]=it.next();
}
}
//正确的例子
Iterator<Integer> it = set2.iterator();
while (it.hasNext()){
Integer num = it.next();
if(set1.contains(num)){
res[r]=num;
}
}