找出數組中最長的連續數字序列(JavaScript實現)


原始題目:

 

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

例如:

給定[100, 4, 200, 1, 3, 2],

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

 

小菜給出的解法:

 

 1 function maxSequence(array,step){
 2   var _array = array.slice(),  //clone array
 3       _step = 1,
 4       _arrayTemp = [],
 5       i = 0;
 6   
 7   var parseLogic = {
 8     //result container
 9     parseResults: [],
10     //set value to array,what's the last array of parseResults
11     set: function(n){
12       this.parseResults[this.parseResults.length-1].push(n);
13     },
14     //get the last array from parseResults
15     get: function(){
16       return this.parseResults[this.parseResults.length-1];
17     },
18     //put a new array in parseResults
19     addItem: function(){
20       this.parseResults.push([]);
21     },
22     //sort parseResults
23     sortByAsc: function(){
24       this.parseResults.sort(function(a,b){
25         return a.length - b.length;
26       });
27     }
28   };
29   
30   //check params
31   _step = step || _step;
32   
33   //sort array by asc
34   _array.sort(function(a,b){
35     return a - b;
36   });
37   
38   //remove repeat of data
39   for(i = 0;i<_array.length;i++){
40     if(_array[i] != _array[i+1]){
41       _arrayTemp.push(_array[i]);
42     }
43   }
44   _array = _arrayTemp.slice();
45   _arrayTemp = [];
46   
47   //parse array
48   parseLogic.addItem();
49   for(i = 0;i<_array.length;i++){
50     if(_array[i]+_step == _array[i+1]){
51       parseLogic.set(_array[i]);
52       continue;
53     }
54     if(_array[i]-_step == _array[i-1]){
55       parseLogic.set(_array[i]);
56       parseLogic.addItem();
57     }
58   }
59   
60   //sort result
61   parseLogic.sortByAsc();
62   
63   //get the max sequence
64   return parseLogic.get();
65   
66 }
View Code

 

調用說明:

 

     方法名稱:

         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]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM