原始題目:
給定一個無序的整數序列, 找最長的連續數字序列。
例如:
給定[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 containerparseResults: [],//set value to array,what's the last array of parseResultsset: function(n){this.parseResults[this.parseResults.length-1].push(n);},//get the last array from parseResultsget: function(){return this.parseResults[this.parseResults.length-1];},//put a new array in parseResultsaddItem: function(){this.parseResults.push([]);},//sort parseResultssortByAsc: 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 datafor(i = 0;i<_array.length;i++){if(_array[i] != _array[i+1]){_arrayTemp.push(_array[i]);}}_array = _arrayTemp.slice();_arrayTemp = [];//parse arrayparseLogic.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 resultparseLogic.sortByAsc();//get the max sequencereturn 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]
新聞熱點
疑難解答