leetcode350.两个数组的交集Ⅱ
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii
code:
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
if(nums1.length>nums2.length){
return intersect(nums2,nums1);
}
Map<Integer,Integer> map =new HashMap<Integer,Integer>();
for(int num:nums1){
int count=map.getOrDefaulta(num,0)+1;
map.put(num,count);
}
int[] intersection=new int[nums1,length];
int index=0;
for(int num:nums2){
int count = map.getOrDefaulta(num,0);
if(count>0){
intersection[index++]=num;
count --;
if(count > 0){
map.put(num,count);
}else{
map.remove(num);
}
}
}
return Arrays.copyOfRange(intersection,0,index)
}
}
map,getOrDefault(key,默认值)
map中会存储对应的key和value
如果map中存在key,则返回key对应的value
如果map中不存在key,则返回默认值
map.put(key,value)
将指定的值与此映射中的指定键关联
当map中存在key时,会覆盖掉原来的value并返回oldvalue
Arrays.copyOfRange(T[ ] original,int from,int to)
将一个原始的数组original,从下标from开始复制,复制到上标to,生成一个新的数组。
注意这里包括下标from,不包括上标to