题目描述
给定两个数组,编写一个函数来计算它们的交集(保留重复元素)。
源代码(保留重复元素)
function compare(v1,v2){
if(v1<v2)return -1;
else if(v1>v2) return 1;
else return 0;
}
var intersect = function(nums1, nums2) {
var i=0,j=0;
var arr=new Array();
nums1.sort(compare);
nums2.sort(compare);
while(i<nums1.length&&j<nums2.length){
if(nums1[i]==nums2[j]){
arr.push(nums1[i]);
i++;
j++;
}
else if(nums1[i]<nums2[j]){
i++;
}else {
j++;
}
}
return arr;
};
因为不熟悉js,所以直接用sort()排序,但是sort()排序是按照首字母第一位进行排序的,这样显然不对,需要在sort()里面添加一个比较函数compare();
以下方法都是去除重复元素的
源代码(这种方法去除重复元素)
求交集
var intersect = function(nums1, nums2) {
var seta=new Set(nums1);
var setb=new Set(nums2);
var st=Array.from(new Set(nums1.filter(v=>setb.has(v))));
return st;
};
求并集
let union = Array.from(new Set(num3.concat(num4)));
求差集
var num3=[1,2,2,1];
var num4=[2,2];
var seta=new Set(num3);
var setb=new Set(num4);
let difference = Array.from(new Set(num3.concat(num4).filter(v=>!seta.has(v)||!setb.has(v))));