Tajuk asal:
Diberi urutan integer yang tidak tertib, cari jujukan terpanjang bagi nombor berturut-turut.
Contohnya:
Diberi [100, 4, 200, 1, 3, 2],
Jujukan terpanjang bagi nombor berturut-turut ialah [1, 2, 3, 4].
Penyelesaian yang diberikan oleh Xiaocai:
fungsi maxSequence(array,step){
var _array = array.slice(), //clone array
_langkah = 1,
_arrayTemp = [],
i = 0;
var parseLogic = {
//bekas hasil
ParseResults: [],
//tetapkan nilai kepada tatasusunan,apakah tatasusunan terakhir parseResults
set: fungsi(n){
This.parseResults[this.parseResults.length-1].push(n);
},
//dapatkan tatasusunan terakhir daripada parseResults
Dapatkan: function(){
Kembalikan this.parseResults[this.parseResults.length-1];
},
//letak tatasusunan baharu dalam parseResults
AddItem: function(){
This.parseResults.push([]);
},
//sort parseResults
SortByAsc: function(){
This.parseResults.sort(function(a,b){
kembali a.panjang - b.panjang;
});
}
};
//semak params
_langkah = langkah || _langkah;
//isih tatasusunan mengikut asc
_array.sort(function(a,b){
Kembalikan a - b;
});
//alih keluar ulangan data
untuk(i = 0;i<_array.length;i ){
Jika(_array[i] != _array[i 1]){
_arrayTemp.push(_array[i]);
}
}
_array = _arrayTemp.slice();
_arrayTemp = [];
//menghuraikan tatasusunan
parseLogic.addItem();
untuk(i = 0;i<_array.length;i ){
If(_array[i] _step == _array[i 1]){
parseLogic.set(_array[i]);
Teruskan;
}
If(_array[i]-_step == _array[i-1]){
parseLogic.set(_array[i]);
parseLogic.addItem();
}
}
//hasil isih
parseLogic.sortByAsc();
//dapatkan jujukan maksimum
Kembalikan parseLogic.get();
}
Arahan panggilan:
Nama kaedah:
maxSequence(array,step)
Perihalan parameter:
Tatasusunan: Tatasusunan untuk dicari. perlu.
langkah: langkah jujukan (kenaikan). Pilihan, lalai ialah 1.
Nilai pulangan:
Kaedah ini tidak akan menukar tatasusunan yang diluluskan, tetapi akan mengembalikan tatasusunan baharu yang mengandungi jujukan terbesar.
Contoh panggilan:
maxSequence([5,7,2,4,0,3,9],1); //kembali [2,3,4,5]
maxSequence([5,7,2,4,0,3,9],2); //kembali [5,7,9]