题解 | #无重复数组#
无重复数组
https://www.nowcoder.com/practice/d2fa3632268b41df9bc417b74802ad8c
题目重点:返回由n个不重复的随机数组成的数组
1、未加1前:(end -start ) * Math.random() 的 范围是[0,end-start] ,因为使用Math.floor向下取整,所以取到end-start的概率极小,所以需要+1来增大[0,end-start]的范围,+1后,变为[1,end-start+1],现在取到end-start的概率就跟其他数相等了。还有一个小小的问题,Math.random() 返回1呢,咋办,此时randomNum = start + end-start + 1 == end + 1,所以对于这种情况,需要使得randomNum = end
const _getUniqueNums = (start,end,n) => {
let arr = []
while(true) {
let randomNum = start + Math.floor((end -start + 1) * Math.random())
if(randomNum > end) randomNum = end
if(!arr.includes(randomNum)) {
arr.push(randomNum)
if(arr.length === n) {
break
}
}
}
return arr
}
查看11道真题和解析
深信服公司福利 734人发布