Titre original :
Étant donné une séquence non ordonnée d'entiers, trouvez la plus longue séquence de nombres consécutifs.
Par exemple :
Étant donné [100, 4, 200, 1, 3, 2],
La séquence continue de nombres la plus longue est [1, 2, 3, 4].
La solution donnée par Xiao Cai :
fonction maxSequence (tableau, étape) {
var _array = array.slice(), //cloner un tableau
_étape = 1,
_arrayTemp = [],
je = 0;
var parseLogic = {
//conteneur de résultat
Analyser les résultats : [],
//définit la valeur sur le tableau, quel est le dernier tableau de parseResults
ensemble : fonction(n){
This.parseResults[this.parseResults.length-1].push(n);
},
// récupère le dernier tableau de parseResults
Obtenir : function(){
Renvoie this.parseResults[this.parseResults.length-1];
},
//mettre un nouveau tableau dans parseResults
AddItem : fonction(){
This.parseResults.push([]);
},
//trier les résultats d'analyse
SortByAsc : fonction(){
This.parseResults.sort(function(a,b){
return a.length - b.length;
});
>
};
//vérifie les paramètres
_step = étape || _step;
//trier le tableau par asc
_array.sort(fonction(a,b){
Retourner a - b ;
});
//supprimer la répétition des données
pour(i = 0;i<_array.length;i ){
Si(_array[i] != _array[i 1]){
_arrayTemp.push(_array[i]);
>
>
_array = _arrayTemp.slice();
_arrayTemp = [];
//analyser le tableau
parseLogic.addItem();
pour(i = 0;i<_array.length;i ){
Si(_array[i] _step == _array[i 1]){
parseLogic.set(_array[i]);
Continuer ;
>
Si(_array[i]-_step == _array[i-1]){
parseLogic.set(_array[i]);
parseLogic.addItem();
>
>
//trier le résultat
parseLogic.sortByAsc();
//obtient la séquence maximale
Renvoie parseLogic.get();
>
Instructions d'appel :
Nom de la méthode :
maxSequence(tableau,étape)
Description du paramètre :
Array : le tableau à rechercher. nécessaire.
step : pas de séquence (incrément). Facultatif, la valeur par défaut est 1.
Valeur de retour :
Cette méthode ne modifiera pas le tableau passé, mais renverra un nouveau tableau contenant la plus grande séquence.
Exemple d'appel :
maxSequence([5,7,2,4,0,3,9],1); //retour [2,3,4,5]
maxSequence([5,7,2,4,0,3,9],2); //retour [5,7,9]