描述
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
思路:
- 分别使用两个字典统计数字出现的次数
- 遍历其中一个字典,寻找另一个字典中是否出现相同相同的key
- 若出现,对比权值,按照权值小的次数添加进resStr数组中
实现:
var intersect = function(nums1, nums2) {
var dic1 = new Array();
var dic2 = new Array();
for(var a in nums1){
var s = nums1[a]+'';
if (dic1[s] == undefined){ //若从未出现过,初始化这个键值对
dic1[s] = '1';
}else{ //若出现过,则将其对应的value转换成数字+1再转成字符串储存
dic1[s] = (parseInt(dic1[s])+1)+'';
}
}
for(var b in nums2){
var s = nums2[b]+'';
if (dic2[s] == undefined){
dic2[s] = '1';
}else{
dic2[s] = (parseInt(dic2[s])+1)+'';
}
}
var resArr=[];
for(var key2 in dic2){
if(dic1[key2] != undefined){
// 比较相同的键值在两个字典中对应的值大小,
// 取小的作为次数,将键加入数组中
if(parseInt(dic1[key2]) >= parseInt(dic2[key2])){
for(var i = 0; i < parseInt(dic2[key2]);i++){
resArr.push(parseInt(key2));
}
}else{
for(var i = 0; i < parseInt(dic1[key2]);i++){
resArr.push(parseInt(key2));
}
}
}
}
return resArr;
};