[请教思路]关于2组数字互相过滤消号 本帖最后由 Ray_Adon 于 2010-09-17 10:43:02 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以这样先循环一次var daA = {}for ( var i = 0, aLength = a.length; i < aLength; i++ ) {daA[a[i]] = true}for ( var i = 0, aLength = b.length; i < aLength; i++ ) { if ( daA[b[i]] == true ) { //a中存在当前循环到的b的号码 //删除a号码 b.splice((aLength--, i--), 1) }} 才10-20w个,用map的话一瞬间就搞定啦。 不知道这10-20W的数字有没有范围,假如说数的范围如果是0---9999,那么就搞个一维数组b[1000],先把B中的数读进来,比如说B中的数是1,2,3,4,5,6,6,7,8,那么就b[0]=0,b[1]=1....b[6]=2,b[7]=1,b[8]=1,然后再把A中的数读进来,比方说是1,1,2,2,4,5,6,8,每读进A中的一个数,就找到数组b相应的那个下标,然后将那个值减1,比如读进来的是1,那么就用b[1]=b[1]-1,依次类推,最后把数组b中,值大于0的那个数组下标读出来,得到的就是B中除去A与B的交集所剩下的值。 取多列交集function testcase(amount){ var rst = []; while (amount--) rst[rst.length] = Math.round(Math.random() * 100000); return rst;}alert((function(list){ var start = (new Date).getTime(); // for test var lenArgs = arguments.length, map = {}, rst = [], len, item, key; if (1 < lenArgs) { while (lenArgs) { list = arguments[--lenArgs], len = list.length; while (len) item = list[--len], map[item] = (map[item] || 0) + 1; } for (key in map) 1 === map[key] && (rst[rst.length] = key); } alert((new Date).getTime() - start + 'ms'); // for test return rst;})(testcase(200000), testcase(200000)).length); 验证时设置焦点的问题 checkbox 点击勾选和变色问题 JQuery插件wBox,弹出一个窗口,怎么回调父窗口的方法 jQuery -- load()事件 如何判断复选框的值是否被选中? 如何用javascript来分页打印报表??? 猫扑的音乐播放器是怎么实现的? 请问那位现成的javascript工具条,最好解决了div透明 请教各位高人!! 求源码50分 百分求jQuery+PHP ajax上传文件简单可用的代码.....0点到4点 试了n次都不行... javascript中动态生成了javascript,如何把动态生成的javascript原有的javascript中??
先循环一次
var daA = {}
for ( var i = 0, aLength = a.length; i < aLength; i++ ) {
daA[a[i]] = true
}for ( var i = 0, aLength = b.length; i < aLength; i++ ) {
if ( daA[b[i]] == true ) {
//a中存在当前循环到的b的号码
//删除a号码
b.splice((aLength--, i--), 1)
}}
var rst = [];
while (amount--) rst[rst.length] = Math.round(Math.random() * 100000);
return rst;
}
alert((function(list){
var start = (new Date).getTime(); // for test
var lenArgs = arguments.length,
map = {}, rst = [],
len, item, key;
if (1 < lenArgs) {
while (lenArgs) {
list = arguments[--lenArgs], len = list.length;
while (len) item = list[--len], map[item] = (map[item] || 0) + 1;
}
for (key in map) 1 === map[key] && (rst[rst.length] = key);
}
alert((new Date).getTime() - start + 'ms'); // for test
return rst;
})(testcase(200000), testcase(200000)).length);