首頁 >web前端 >js教程 >JavaScript實作列出數組中最長的連續數_javascript技巧

JavaScript實作列出數組中最長的連續數_javascript技巧

WBOY
WBOY原創
2016-05-16 16:23:271151瀏覽

原題目:

給定一個無序的整數序列, 找出最長的連續數字序列。

例如:

已知[100, 4, 200, 1, 3, 2],

最長的連續數字序列是[1, 2, 3, 4]。

小菜給的解法:

複製程式碼 程式碼如下:

function maxSequence(array,step){
  var _array = array.slice(),  //clone array
      _step = 1,
      _arrayTemp = [],
      i = 0;
  var parseLogic = {
    //result container
    parseResults: [],
    //set value to array,what's the last array of parseResults
    set: function(n){
      this.parseResults[this.parseResults.length-1].push(n);
    },
    //get the last array from parseResults
    get: function(){
      return this.parseResults[this.parseResults.length-1];
    },
    //put a new array in parseResults
    addItem: function(){
      this.parseResults.push([]);
    },
    //sort parseResults
    sortByAsc: function(){
      this.parseResults.sort(function(a,b){
        return a.length - b.length;
      });
    }
  };
  //check params
  _step = step || _step;
  //sort array by asc
  _array.sort(function(a,b){
    return a - b;
  });
  //remove repeat of data
  for(i = 0;i<_array.length>     if(_array[i] != _array[i 1]){
      _arrayTemp.push(_array[i]);
    }
  }
  _array = _arrayTemp.slice();
  _arrayTemp = [];
  //parse array
  parseLogic.addItem();
  for(i = 0;i<_array.length>     if(_array[i] _step == _array[i 1]){
      parseLogic.set(_array[i]);
      continue;
    }
    if(_array[i]-_step == _array[i-1]){
      parseLogic.set(_array[i]);
      parseLogic.addItem();
    }
  }
  //sort result
  parseLogic.sortByAsc();
  //get the max sequence
  return parseLogic.get();
}

 
呼叫說明:

     方法名稱:

         maxSequence(array,step)

     參數說明:

         array:尋找的陣列。必要。

         step:序列步長(增量)。可選,預設為1。

     回傳值:

         此方法不會改變傳入的陣列,會傳回一個包含最大序列的新陣列。

     呼叫範例:

         maxSequence([5,7,2,4,0,3,9],1);  //return [23,4,5]

         maxSequence([5,7,2,4,0,3,9],2);  //return [5,7,9]

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn