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