题目说明: 两个数组,内部元素可能有重复的,求两个数组中的元素的交集,需要去重。 javascript实现:
var a =[‘aa’,’bb’,’e’,’aa’,’bb’,’e’,’12’,’cc’];
var b =[‘wa’,’bb’,’ee’,’cc’,’e’,’16’,’cc’];
function intersection(m,n){
var map = {m:{},n:{},r:{}},r=[],i;
if(m.length<n.length){
i = m;m = n;n = i;
}
for(i=0; i<m.length; i++){
map.n[m[i]]?(map.r[m[i]]||(r.push(m[i]),map.r[m[i]]=i+1)):(map.m[m[i]]=i+1);
if(i<n.length){
map.m[n[i]]?(map.r[n[i]]||(r.push(n[i]),map.r[n[i]]=i+1)):(map.n[n[i]]=i+1);
}
}
return r;
}
st = new Date();
console.debug(intersection(a,b));
console.debug((new Date())-st); 分析:时间复杂度O(n), n = max(a.length,b.length)