350. 两个数组的交集 II(LeetCode)
题目描述
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
我们可以不考虑输出结果的顺序。
条件分析
- 需要记录元素出现的次数;
解题思路(查找表)
- 可以定义一个Map用来存储nums1中元素及元素出现的次数;
- 遍历nums2,如果nums2中的元素存在map中且次数大于0,则该元素在交集中,同时map中元素出现的次数--;
编码如下
public int[] intersect(int[] nums1, int[] nums2) {
Map<Integer, Integer> map = new HashMap<>();
Integer value = null;
for (int i : nums1) {
value = map.get(i);
if (value == null) {
map.put(i, 1);
} else {
map.put(i, ++value);
}
}
List<Integer> results = new ArrayList<>();
for(int j : nums2) {
value = map.get(j);
if (value != null && value > 0) {
map.put(j, --value);
results.add(j);
}
}
int[] re = new int[results.size()];
int k=0;
for (Integer m : results) {
re[k++] = m;
}
return re;
}
浙公网安备 33010602011771号