解析 头条面试题

题目以下:数组

第一题: 给定一个多为数组arr,实现一个方法获取数组的最大深度(维度)app

例子1:arr=[1,2,[3,4,[6]]]  则返回3
    例子2:arr=[3,4,[6]]  则返回2


   
    最终代码:(此处只解决单项维度问题)
        var arr=[5,[6,7,8,[3,[9]]]]
        function deep(arr,count=0){
              count++;
              for(var i=0;i<arr.length;i++){
                  if(Object.prototype.toString.call(arr[i]) == '[object Array]'){
                     count= deep(arr[i],count);
                  }
              }
          return count;
        }
         console.log(deep(arr))
         
         
   未解决多项维度问题,例如:arr=[1,2,[3,4,5],[2,3,4[6]]];      
   最终代码1:
    var arr= [1,2,[3,4],[5,6,7,[9]]]
        function test4(arr = []) {
          let arrDeepLen = [];
          for (let i = 0; i < arr.length; i++) {
            let item = arr[i];
            if (Array.isArray(item)) {
             const c= test1(item);
             
             arrDeepLen.push(c+1);
            }
          }
        
          function test1(arr = [], count = 0) {
            count++;
            for (let i = 0; i < arr.length; i++) {
              const item = arr[i];
              if (Array.isArray(item)) {
                count = test1(item, count);
              }
            }
            return count;
          }
          return Math.max.apply(null,arrDeepLen);
       }
  最终代码2:           
         function deep(arr, count = 0, num = []) {
             count++
            for (let index in arr) {
                if (Array.isArray(arr[index])) {
                    deep(arr[index], count, num)
                } else {
                    num.push(count)
                }
            }
        
            return Math.max.apply(null, num)
        }
        
        let arr = [1, 2, 3, ['n', 'i', ['t', ['nihao']]], ['a', 'b']]
       console.log(deep(arr))
  考察范围:回调,此处注意回调堆栈的执行顺序,须要对每次执行返回的数赋值

第二题: 实现一个方法,生成数组[1,2,3,4,...99],而后将数组内的项随机打乱,每个数 出如今任意一位置的几率相同。dom

最终代码:prototype

function randomArray(){
      let arr=[];
      for(var i=0;i<100;i++){
        arr.push(i)
      }
      arr.sort(function(){return Math.random()-0.5});
      
      return arr;
  }
     
  randomArray()

第三题:给定一个数组arr 和一个数值target,数组内的每一项都是数组,若是数组的x,y相加等于target,则把这俩项以[x,y]的格式放到一个空数组中,写一个方法,有知足条件到项,并返回最后的数组。
注:如[4,6]与[6,4]则是等价,只容许在结果中出现一次。
例子1: arr=[1,2,4,7,3,6] target=10 则返回:[[4,6],[7,3]]
例子2: arr=[1,2,4,7] target=10 则返回:[]code

最终代码:get

let arr=[1,2,3,5,7,8];
        function test(arr,target=10){
          let newArr =[]
          for(var i=0;i<arr.length;i++ ){
              for(var j=i+1;j<arr.length;j++){
                  let sum=arr[i] + arr[j]
                  if(sum === target){
                    newArr.push([arr[i],arr[j]]);
                  }
              }
          }
          return newArr;
        }
相关文章
相关标签/搜索