العنوان الأصلي:
بالنظر إلى تسلسل غير مرغوب فيه من الأعداد الصحيحة ، ابحث عن أطول تسلسل للأرقام المتتالية.
على سبيل المثال:
معطى [100 ، 4 ، 200 ، 1 ، 3 ، 2] ،
أطول تسلسل للأرقام المتتالية هو [1 ، 2 ، 3 ، 4].
الحل الذي قدمه Xiaocai:
نسخة الكود كما يلي:
وظيفة maxsequence (صفيف ، خطوة) {
var _array = array.slice () ، // clone Array
_step = 1 ،
_arraytemp = [] ،
أنا = 0 ؛
var parselogic = {
// النتيجة حاوية
parseresults: [] ،
// ضبط القيمة إلى Array ، ما هي المجموعة الأخيرة من ParserSults
المجموعة: وظيفة (ن) {
this.parseresults [this.parseresults.length-1] .push (n) ؛
} ،
// احصل على آخر مجموعة من Parseresults
الحصول على: وظيفة () {
إرجاع this.parseresults [this.parseresults.length-1] ؛
} ،
// ضع مجموعة جديدة في Parseresults
AddItem: Function () {
this.parseresults.push ([]) ؛
} ،
// فرز parseresults
sortbyasc: function () {
this.parseresults.sort (وظيفة (أ ، ب) {
إرجاع A.Length - B.Length ؛
}) ؛
}
} ؛
// تحقق من المعلمة
_step = الخطوة || _خطوة؛
// فرز صفيف بواسطة ASC
_array.sort (وظيفة (أ ، ب) {
إرجاع أ - ب ؛
}) ؛
// إزالة تكرار البيانات
لـ (i = 0 ؛ i <_array.length ؛ i ++) {
if (_array [i]! = _array [i+1]) {
_arraytemp.push (_array [i]) ؛
}
}
_array = _arraytemp.slice () ؛
_arraytemp = [] ؛
// parse صفيف
parselogic.additem () ؛
لـ (i = 0 ؛ i <_array.length ؛ i ++) {
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 () ؛
// احصل على تسلسل Max
إرجاع parselogic.get () ؛
}
تعليمات الاتصال:
اسم الطريقة:
الحد الأقصى (صفيف ، خطوة)
وصف المعلمة:
صفيف: الصفيف يمكن العثور عليه. ضروري.
الخطوة: خطوة التسلسل (الزيادة). اختياري ، الافتراضي هو 1.
قيمة الإرجاع:
لا تغير هذه الطريقة المصفوفة الواردة وتُرجع مجموعة جديدة تحتوي على أكبر تسلسل.
مثال اتصل على:
maxsovery ([5،7،2،4،0،3،9] ، 1) ؛ // العودة [2،3،4،5]
maxsequence ([5،7،2،4،0،3،9] ، 2) ؛ // العودة [5،7،9]