Menu
CoddyTech

Longest Increasing Subsequence

لديك قائمة من الأعداد الصحيحة nums. يحتفظ التتابع الجزئي ببعض العناصر بترتيبها الأصلي ويحذف الباقي؛ وليس من الضروري أن تكون العناصر المحتفَظ بها متجاورة. أعد طول أطول تتابع جزئي تزداد قيمه بصرامة من اليسار إلى اليمين. لا يُعدّ تساوي قيمتين متتاليتين زيادةً.

الدالة

lengthOfLIS(nums: integer-array) → integer
numsinteger-array
قائمة الأعداد الصحيحة للاختيار منها
تُرجعinteger
طول أطول متتالية فرعية متزايدة بصرامة

القيود

  • 1 ≤ nums.length ≤ 2500
  • -104 ≤ nums[i] ≤ 104

أمثلة

المدخلات
nums = [3, 1, 8, 2, 5, 9, 4, 7]
المخرجات
4
الشرح
تزداد المتتاليات 1، 2، 5، 9، وكذلك 1، 2، 5، 7 و1، 2، 4، 7: طولها 4. لا يوجد اختيار من خمس قيم يظل متزايدًا.
challenge icon

سؤال إضافي

هل يمكنك إرجاع إحدى أطول المتتاليات الفرعية المتزايدة نفسها، إلى جانب طولها، مع الحفاظ على زمن تنفيذ O(n log n)؟

إعادة ضبط الشيفرة
def lengthOfLIS(nums):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

وسيط

nums = [3, 1, 8, 2, 5, 9, 4, 7]

الإخراج المتوقع

4