m個の要素の配列、ランダムにn個の重複しない要素を選択する(js実装)
3970 ワード
問題の説明:
m source , n target
注意:source配列要素自体は重複しません.m>n
ソリューション
シナリオ1:
シナリオ2:
シナリオ1とシナリオ2の違い:
私たちは普段案を使うことが多いかもしれません.直感的だからです.しかし、分析によると、案2はもっと良いことが明らかになりました.理由:シナリオ1は実際のデータを比較し、シナリオ2は下付きで比較されるため、シナリオ2は比較記憶時に効率が高く、記憶に占めるメモリが小さい.
シナリオ2 JavaScriptコード
/**
* source 10
* 4 target
*
*/
(function(){
var source= [
"c","c++","php","html","css","javascript","java","jsp","asp","node"
];
var sL = source.length;
var target= []; //
// 4
for(var i = 0; i < 4; i++){
var rand = Math.floor( Math.random() * sL );
if(target.length > 0){
detection(target, rand);
}else{
target.push(rand);
}
}
// num arr, ,
function detection(arr, num){
var repeatFlag = false;
for(var j = 0; j < arr.length; j++){
if(arr[j] == num){
repeatFlag = true;
}
}
if(repeatFlag){
//
arguments.callee(arr, Math.floor( Math.random() * sL ));
}else{
arr.push(num);
}
}
// , target
//for(var i=0; i
// console.log(source[target[i]]);
//}
})();
コメントのコードは、テストのコードです.
私も半日最適化してやっと考え出した方法で、とても(∩∩)、簡単な問題は絶えず優から解決して、私たちはもっと進歩します.