问题:
var a = ["11","211","33","4","55"];
var b = ["11","33","4"];
如何获得 ["211","55"]
要求
1 复杂度小于O(n^2)
2 用原生js写(Java也可以,没有用到高级API就行 )
ps:字符串之间没有规律~~
两边排序,快速排序平均复杂度LogN,然后交错比较,复杂度N
a.reduce(function(a,b){
return a>b?a:b;
})
b.reduce(function(a,b){
return a>b?b:a;
})
function a(){
var a = ["11","211","33","4","55"];
var b = ["11","33","4"];
var c = new Array();
for(i=0;i<a.length;i++){
var ai = a[i];
var ck = true;
for(j=0;j<b.length;j++){
if(ai==b[j]){
ck=false;
}
}
if(ck){
c.push(ai);
}
}
console.log(c);
}

按照我的思路。我会先使用concat的方法,将其整合为一个数组,其次,我会使用reduce方法,大概遍历length-1次,然后加到一个新数组里面,
同时我会判断那个数组的内部会不会有这个数字,如果有,我会放在一个新数组,到最后遍历结束的时候,我活得到了三个新数组,一个是长度为8的总长数组,一个是长度为3的重复数组,一个是为5的不重复(单一)数组,接着再reduce一次这个长度为5的单一数组,大概是5次操作,然后返回一个最新的定义的数组,最后我操作了13遍
先遍历数组b,生成一个字典,再遍历数组a
var a = ["11","211","33","4","55"];
var b = ["11","33","4"];
var d = {};
b.forEach(function(item){
d[item] = true;
});
var result = a.filter(function(item){
return !d[item];
});