美文网首页
随机扫雷面,去重[...new Set(arr)]

随机扫雷面,去重[...new Set(arr)]

作者: 公纸晓白 | 来源:发表于2020-03-20 10:08 被阅读0次

    利用随机洗牌在10*10表格内输出随机20个O

    来自 Knuth洗牌算法 ,Knuth的书《The Art of Computer Programming》,简称 TAOC

    
      <style>
        body {
          background-color: #f8f8f8;
        }
        #box {
          width: 220px;
          height: 220px;
          margin: 20px auto;
          /* border: 1px solid #333; */
          background-color: #fff;
        }
        .inner {
          width: 20px;
          height: 20px;
          /* margin: 20px auto; */
          margin: 0px;
          margin-top: -12px;
          display: inline-block;
          border: 1px solid #333;
          background-color: #fff;
          /* box-sizing: border-box; */
          text-align: center;
          line-height: 20px;
          vertical-align:text-top;
          /* vertical-align:top; */
        }
      </style>
    </head>
    <body>
      <div id="box">
    
      </div>
    <script>
      var arr = [];
      for(var i= 0;i<=99;i++){
        arr[i]=i;//100个顺序排列数字
      }
      var rams =function(arr){ //随机洗牌函数
       for(var i = (arr.length-1); i>= 0; i--)
          {   
            var x = Math.floor(Math.random() * (i+1));
            var m = arr[i]
            arr[i]=arr[x];
            arr[x]=m;
          }
        console.log(arr)
      }
      rams(arr) //100个数字打乱排序
      var x = '';
      console.log(arr)
      for (var i = 0; i < arr.length;i++) {
        if(arr[i]<20) { //循环判断
          x = x+'<div class="inner">O</div>'
        } else {
          x = x+'<div class="inner"> </div>'
        }
      }
      document.getElementById('box').innerHTML = x;
    </script>
    

    一维数组转嵌套数组并去重;

     [
         { parent: '1', son: '1' },
         { parent: '1', son: '2' },
         { parent: '2', son: '1' }
        { parent: '2', son: '2' }
        ]转化成
       [
         {
           parent: '1',
           children:[
             { son: '1' },
             { son: '2' }
           ]
        },
         {
           parent: '2',
           children:[
             { son: '1' },
             { son: '2' }
           ]
        }
       ]
    const classify = (data) => {
        let list = [];
        data.map(ele => {
            if (list.length <= 0) {
               list.push({
                   parent: ele.parent,
                   childrens: [{son: ele.son}]
                })
                return
             }
             let child = list.find(item => {
               return item.parent ==ele.parent
             })
                 if (child) {
                    child.childrens.push({son: ele.son})
                  } else {
                    list.push({
                    parent: ele.parent,
                    childrens: [{son: ele.son}]
                    })
                  }
            })
        return list
    }
    
    有一组数字,从1到n,从中减少了3个数,顺序也被打乱,放在一个n-3的数组里
    请找出丢失的数字,最好能有程序,最好算法比较快
    假设n=10000
    
    function getArray (){ //创建随机丢失3个数字的数组,并打乱顺序。
        var arr =[]
        for(var i=1;i<=10000;i++){
            arr.push(i);
        }
        var a = arr.splice(Math.floor(Math.random()*arr.length),1);
        var b = arr.splice(Math.floor(Math.random()*arr.length),1);
        var c = arr.splice(Math.floor(Math.random()*arr.length),1);
        arr.sort(function(){
            return 0.5 - Math.random(); 
        });
        console.log('丢失数字为: ' + a + ',' + b + ',' + c + '\n数组元素个数: ' + arr.length);
        return arr;
    }
    function getMissMunber(arr){ //寻找丢失的数字。
        var mis = [],
            obj = {},
            len = 10000;
        for(var i=0; i<arr.length; i++){
            obj[arr[i]] = true;
        }
        for(var i=1; i<=len; i++){
            if(!obj[i]){
                mis.push(i);
            }
        }
        return mis;
    }
    var arr = getArray ();
    var mis = getMissMunber(arr);
    console.log('计算结果: ' + mis);
    

    相关文章

      网友评论

          本文标题:随机扫雷面,去重[...new Set(arr)]

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