题目描述
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
说明:
输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。
代码
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
HashMap<Integer, Integer> res = new HashMap();
if (nums1.length > nums2.length) {
for (int i : nums1) {
res.put(i, 1);
}
int count = 0;
for (int i : nums2) {
if (res.get(i) != null && res.get(i) == 1){
res.put(i, 2);
count ++;
}
}
int[] result = new int[count];
int index = 0;
for (Integer i : res.keySet()) {
if (res.get(i) != null && res.get(i) > 1) {
result[index] = i;
index ++;
}
}
return result;
}
else {
for (int i : nums2) {
res.put(i, 1);
}
int count = 0;
for (int i : nums1) {
if (res.get(i) != null && res.get(i) == 1){
res.put(i, 2);
count ++;
}
}
int[] result = new int[count];
int index = 0;
for (Integer i : res.keySet()) {
if (res.get(i) != null && res.get(i) > 1) {
result[index] = i;
index ++;
}
}
return result;
}
}
}
解题要点
1、注意新建int数组时,需要指定数组大小,初始化全部为0。
2、利用hashMap计数,以去重。
3、当处理两个数组,要求数组大小有区分时,可以使用以下方法保证有序。
public int[] getIntersection(Set<Integer> set1, Set<Integer> set2) {
if (set1.size() > set2.size()) {
return getIntersection(set2, set1);
}
//后续处理
......
}