萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> JavaScript實現列出數組中最長的連續數

JavaScript實現列出數組中最長的連續數

   原始題目:

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

  例如:

  給定[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;i++){

  if(_array[i] != _array[i+1]){

  _arrayTemp.push(_array[i]);

  }

  }

  _array = _arrayTemp.slice();

  _arrayTemp = [];

  //parse array

  parseLogic.addItem();

  for(i = 0;i<_array.length;i++){

  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 [2,3,4,5]

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

copyright © 萬盛學電腦網 all rights reserved