有1到10w这个10w个数,去除2个并打乱次序,如何找出那两个数
一、此方法性能不太好 耗时 400ms
//有1到10w这个10w个数,去除2个并打乱次序,如何找出那两个数?
var arrA = [];
var arrB = [];
var arrC = [];
var arrD = [];
//求出A数组的值
for(var i = 0; i < 10000; i++) {
arrA.push(i);
}
//A排序
arrA.sort(function(a, b) {
return Math.random() - 0.5
})
//求出B数组的值,并比较A/B两个数组,如果A数组里有B数组里的数,把这些数放大到C数组中
for(var i = 0; i < arrA.length - 2; i++) {
arrB[arrA[i]] = arrA[i];
//console.log(arrB);
if(arrB.indexOf(arrA[i]) > -1) {
arrC.push(arrA[i]);
//console.log(arrC);
}
}
// 在比较C/A两个数组,把B数组里面没有的数放到D数组中,没有的项即为抽出的数
for(var i = 0; i < arrA.length; i++) {
if(arrC.indexOf(arrA[i]) == -1) {
arrD.push(arrA[i]);
//console.log(arrD);
}
}
// console.log(arrA);
// console.log(arrB);
// console.log(arrC);
console.log(arrD);
二、此方法简便,易懂,耗时少 大概50ms
var arrA = [];
var arrB = [];
var arrC = [];
//求出A数组的值
for(var i = 0; i < 10000; i++) {
arrA.push(i);
}
//A排序
arrA.sort(function(a, b) {
return Math.random() - 0.5
})
//求出B数组的值
for(var i = 0; i < arrA.length - 2; i++) {
arrB[arrA[i]] = arrA[i];
//console.log(arrB);
}
//如果B数组里的第i项为undefind,打印出i放在arrC
for(var i = 0; i<arrB.length; i++){
if(arrB[i] == undefined){
arrC.push(i);
}
}
console.log(arrC);

浙公网安备 33010602011771号