二分搜索
棋盘覆盖问题 (https://www.cnblogs.com/zf-blog/p/8336547.html)
随机数
生成随机数
// 产生一个[min,max)范围的随机有理数
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
// 产生一个[min,max]范围的随机整数,注意这个范围包含max
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
上面这个方法中的+ 1
是一个很容易遗漏的地方,考虑一下为什么Math.floor(Math.random()*10)
最大只能产生9。(因为Math.random生成的是[0,1))
均匀打乱算法:Fisher–Yates shuffle。
function shuffle(array) {
var m = array.length,
t, i;
while (m) {
i = Math.floor(Math.random() * m--);
t = array[m];
array[m] = array[i];
array[i] = t;
}
return array;
}
未知N的一批数据中,抽取M个随机数:蓄水池算法 (https://blog.csdn.net/huagong_adu/article/details/7619665)