数组乱序

268 阅读1分钟

题目描述

给定一个未排序的数组,从中取出指定个数的随机元素,并以数组的形式进行返回

测试用例

例如:给定数组[1, 3, 5, 6, 8, 9, 5],要求输出一个随机数组,数组的个数是3,输出可以是[1,3,5]、[6,8,9].....等只要是随机的三个数字,并且取自给定数组即可。

核心思路

  1. 确定数组分割点
  2. 利用指针移动,初始指针指向数组末尾
  3. 随机生成数组下标小于当前指针指向的数组下标,并进行交换

算法实现

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]
    
}