美文网首页
随机扫雷面,去重[...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