题目简介
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
解决思路
- 使用哈希表,自动去重而且可以知道那个元素已经出现过了。代码如下
public int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> set = new HashSet<Integer>();
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < nums1.length; i++){
set.add(nums1[i]);
}
for(int i = 0; i < nums2.length; i++){
if(set.contains(nums2[i])){
list.add(nums2[i]);
set.remove(nums2[i]);
}
}
int ints[] = new int[list.size()];
for(int i = 0; i < list.size(); i++){
ints[i] = list.get(i);
}
return ints;
}
时间复杂度O(n)n与nums1和nums2相关,空间复杂度O(n)和数组中元素相关 2.根据题目数据范围,使用数组ints实现哈希表的功能,记录元素出现次数。
public int[] intersection(int[] nums1, int[] nums2) {
int[] ints = new int[1001];
for(int i = 0;i < nums1.length; i++){
if(ints[nums1[i]] == 0){
ints[nums1[i]]++;
}
}
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0;i < nums2.length; i++){
if(ints[nums2[i]] != 0){
ints[nums2[i]]++;
}
}
for(int i = 0; i < ints.length; i++){
if(ints[i] > 1){
list.add(i);
}
}
int[] tmp = new int[list.size()];
for(int i = 0; i < list.size(); i++){
tmp[i] = list.get(i);
}
return tmp;
}
时间复杂度O(n)n与nums1和nums2有关,空间复杂度为nums1元素大小相关。