美文网首页Web前端之路让前端飞Web 前端开发
随机生成一个长度为 10 的整数类型的数组,例如 [2, 10,

随机生成一个长度为 10 的整数类型的数组,例如 [2, 10,

作者: 青山旁小溪边 | 来源:发表于2019-10-30 13:22 被阅读0次

    问题

    随机生成一个长度为 10 的整数类型的数组,例如 [2, 10, 3, 4, 5, 11, 10, 11, 20],将其排列成一个新数组,要求新数组形式如下,例如 [[2, 3, 4, 5], [10, 11], [20]]。

    分析题目

    看到题目仔细思考下,前面的你会发现思考没有问题,生成一个长度为 10 的整数类型的数组,去掉重复元素,然后就是进行从小到大排序,到这里是没有什么争议的,但是你看到例子中这个最终的新数组就会发现这个题出的有歧义,why?

    • 第一种
      把现有数组按区间来分,以10位为单位区分,比如10以内的一组,10-20之间的一组,20-30之间的一组,以此类推;
    • 第二种
      把现有数组如果是连续的放一组,不连续的单独放。

    答案

    • 先来看第一种理解方式
      关键点是元素除以10的取整数作为新数组的下标
    /*
     * @Description:
     * @Author: Jasper
     * @Github: https://github.com/yuanxinfeng
     * @Date: 2019-10-30 10:49:45
     * @LastEditors: Jasper
     * @LastEditTime: 2019-10-30 13:49:08
     */
    //随机生成10位整型随机数组
    const randomAry = (n = 10, range = { min: 1, max: 99 }) => {
      let arr = Array.from({ length: n });
      arr = arr.map(() => {
        return Math.floor(Math.random() * (range.max - range.min + 1) + range.min);
      });
      console.log(`random - ${arr}`);
      return arr;
    };
    let arr = randomAry();
    function changeArr(arr) {
      let resArr = [];
      arr.forEach((n, i) => {
        // 元素除以10的取整数作为新数组的下标
        let key = parseInt(n / 10);
        if (Array.isArray(resArr[key])) {
          if (!resArr[key].includes(n)) {
            resArr[key].push(n);
          }
        } else {
          resArr[key] = [n];
        }
      });
      // 这样导致 resArr有空集合 去空处理
      return resArr.filter(Boolean);
    }
    let resArr = changeArr(arr);
    console.log("result", resArr);
    /*
    random - 18,79,40,57,18,31,48,24,54,12
    sort - 12,18,24,31,40,48,54,57,79
    result - [ [ 12, 18 ], [ 24 ], [ 31 ], [ 40, 48 ], [ 54, 57 ], [ 79 ] ]
    */
    
    • 第二种
      随机生成10位整型随机数组
      去重
      排序
      求连续结果
    /*
     * @Description:去重排序求连续
     * @Author: Jasper
     * @Github: https://github.com/yuanxinfeng
     * @Date: 2019-10-30 10:49:45
     * @LastEditors: Jasper
     * @LastEditTime: 2019-10-30 11:12:24
     */
    //随机生成10位整型随机数组
    const randomAry = (n = 10, range = { min: 1, max: 99 }) => {
      let arr = Array.from({ length: n });
      arr = arr.map(() => {
        return Math.floor(Math.random() * (range.max - range.min + 1) + range.min);
      });
      console.log(`random - ${arr}`);
      return arr;
    };
    let arr = randomAry();
    // 去重
    arr = Array.from(new Set(arr));
    // 排序
    arr = arr.sort((x, y) => x - y);
    console.log(`sort - ${arr}`);
    // 求连续结果
    let newAry = [];
    for (let i = 0; i < arr.length; i++) {
      let tmpAry = [arr[i]];
      // index用于跳过已经处理过的数组元素
      let index = arr.length;
      for (let j = i + 1, count = 1; j < arr.length; j++, count++) {
        // 判断是否是连续值
        if (arr[i] + count === arr[j]) {
          tmpAry.push(arr[j]);
        } else {
          index = j - 1;
          break;
        }
      }
      i = index;
      newAry.push(tmpAry);
    }
    console.log("result", newAry);
    /*
    random - 58,87,32,48,16,5,2,4,83,99
    sort - 2,4,5,16,32,48,58,83,87,99
    result - [ [ 2 ],  [ 4, 5 ],  [ 16 ],  [ 32 ],  [ 48 ],  [ 58 ],  [ 83 ],  [ 87 ],  [ 99 ] ]
    */
    

    相关文章

      网友评论

        本文标题:随机生成一个长度为 10 的整数类型的数组,例如 [2, 10,

        本文链接:https://www.haomeiwen.com/subject/ljlovctx.html