题目描述
给定一个未排序的数组,从中取出指定个数的随机元素,并以数组的形式进行返回
测试用例
例如:给定数组[1, 3, 5, 6, 8, 9, 5],要求输出一个随机数组,数组的个数是3,输出可以是[1,3,5]、[6,8,9].....等只要是随机的三个数字,并且取自给定数组即可。
核心思路
- 确定数组分割点
- 利用指针移动,初始指针指向数组末尾
- 随机生成数组下标小于当前指针指向的数组下标,并进行交换
算法实现
function getRandomArr(array, count) {
let point = array.length - count;
let len = array.length;
while(len < point) {
let ranIndex = Math.random() * (len--);
if (ranIndex !== len) {
[array[ranIndex], array[len]] = [array[len], array[ranIndex]];
}
}
return array.slice[point]
}