我正在尝试制作一个随机数生成器。
我编写了代码,并且效果很好。
document.querySelector('#btn').addEventListener('click',()=>{
generate(1,45,6)
});
function generate(min, max, count){
const arr = [];
if(min >= max) return;
if(max - min + 1 < count) return;
while (arr.length < count) {
let num = Math.floor(Math.random() * max) + min;
let flag = arr.every((i) => {
return i === num ? false : true;
});
if (flag) {
arr.push(num);
}
}
console.log(arr);
}
<button id="btn">Gen</button>
但是我算法的时间复杂度是 O(n)。 (我不确定,我没有严格计算)
我希望能减少时间的复杂性。
而且,我想上面的代码可以压缩,但我不能压缩。
我想要的摘要
要尽可能减少时间复杂度
使其紧凑
答案 0 :(得分:2)
您可以使用Set
(它将处理重复项)代替数组,并继续检查其大小,直到获得所需的所有数字为止:
document.querySelector('#btn').addEventListener('click',()=>{
generate(1,45,6)
});
function generate(min, max, count){
const s = new Set();
if(min >= max) return;
if(max - min + 1 < count) return;
while (s.size < count) { // O(1)
let num = Math.floor(Math.random() * max) + min;
s.add(num); // O(1)
}
console.log(Array.from(s));
}
<button id="btn">Gen</button>