元のタイトル:
順序のない整数シーケンスが与えられた場合、連続する数字の最長シーケンスを見つけます。
例:
与えられた [100, 4, 200, 1, 3, 2]、
最も長く連続する数字の並びは [1、2、3、4] です。
Xiao Cai が与えた解決策:
関数 maxSequence(配列,ステップ){
var _array = array.slice(), //配列のクローンを作成します
_ステップ = 1,
_arrayTemp = [],
i = 0;
var parseLogic = {
//結果コンテナ
解析結果: []、
// 値を配列に設定します。parseResults
の最後の配列は何ですか?
セット: function(n){
This.parseResults[this.parseResults.length-1].push(n);
}、
// parseResults
から最後の配列を取得します
取得: function(){
this.parseResults[this.parseResults.length-1];
を返す
}、
// 新しい配列を parseResults
に入れます
AddItem: function(){
This.parseResults.push([]);
}、
//parseResults
をソート
SortByAsc: function(){
This.parseResults.sort(function(a,b){
戻り a.length - b.length;
});
}
};
//パラメータをチェック
_ステップ = ステップ || _ステップ;
// 配列を asc でソート
_array.sort(関数(a,b){
a - b を返します;
});
//データの繰り返しを削除
for(i = 0;i<_array.length>
If(_array[i] != _array[i 1]){
_arrayTemp.push(_array[i]);
}
}
_array = _arrayTemp.slice();
_arrayTemp = [];
//配列を解析
parseLogic.addItem();
for(i = 0;i<_array.length>
If(_array[i] _step == _array[i 1]){
parseLogic.set(_array[i]);
続行;
}
If(_array[i]-_step == _array[i-1]){
parseLogic.set(_array[i]);
parseLogic.addItem();
}
}
//ソート結果
parseLogic.sortByAsc();
//最大シーケンスを取得します
parseLogic.get();
を返す
}
呼び出し手順:
メソッド名:
maxSequence(配列,ステップ)
パラメータの説明:
配列: 検索する配列。必要。
ステップ: シーケンスステップ (インクリメント)。オプション、デフォルトは 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]