题目描述
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序
解题思路
利用hashmap先遍历第一个数组,将第一个数组各元素的值和出现的次数存在hashmap中,在遍历第二个数组,当第二个数组的元素在map中并且值大于0时,将此数添加到linkedlist中(使用linkedlist是因为我们并不知道交集有多少个元素,如果事先分配定长也许会浪费空间,而且我们最后要返回的是一个数组,不可能这样分配一个过长的数组存储),最后再将;linkedlist转为int数组就可以啦
代码实现
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i:nums1){
if (map.containsKey(i))map.put(i,map.get(i)+1);
else map.put(i,1);
}
LinkedList<Integer> list=new LinkedList<Integer>();
for(int j :nums2){
if(map.containsKey(j) && map.get(j)>0){
list.add(j);
map.put(j,map.get(j)-1);
}
}
int[] nums= new int[list.size()];
for(int i=0;i<nums.length ;i++)
nums[i]=list.poll();
return nums;
}
}
执行用时 :
8 ms, 在所有 Java 提交中击败了62.50%的用户
内存消耗 :
37.1 MB, 在所有 Java 提交中击败了36.82%的用户