解析 頭條面試題

題目以下:數組

第一題: 給定一個多爲數組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;
        }
相關文章
相關標籤/搜索