Menu
CoddyTech

Merge Intervals

בינוניקטעיםמיוןpython iconjava iconcpp iconc iconjs icon+10

ניתנת לך קבוצה של מקטעים, שכל אחד מהם הוא טווח של מספרים שלמים מנקודת התחלה ועד נקודת סיום. מזג כל קבוצה של מקטעים חופפים למקטע אחד שמכסה את כל הקבוצה, והחזר את המקטעים הממוזגים כשהם ממוינים לפי נקודת ההתחלה. מקטעים שרק נוגעים זה בזה, כמו [1, 4] ו-[4, 5], נחשבים לחופפים.

המקטעים ניתנים כשני מערכים באורך זהה: מקטע i הוא [starts[i], ends[i]]. עליך להחזיר מערך דו־ממדי, רשימה של זוגות [start, end].

פונקציה

mergeIntervals(starts: integer-array, ends: integer-array) → integer-2d-array
startsinteger-array
תחילת כל מרווח
endsinteger-array
בסוף כל מרווח, באותו אינדקס כמו נקודת ההתחלה שלו
מחזירהinteger-2d-array
המרווחים שאוחדו כזוגות [start, end], ממוינים לפי start

אילוצים

  • 1 ≤ starts.length == ends.length ≤ 104
  • 0 ≤ starts[i] ≤ ends[i] ≤ 104
  • המרווחים מגיעים בכל סדר שהוא.
  • טווחים שנוגעים זה בזה רק בקצה נחשבים לחופפים.

דוגמאות

קלט
starts = [5, 1, 12, 3]ends = [7, 4, 14, 6]
פלט
[[1, 7], [12, 14]]
הסבר
לפי סדר ההתחלה, [1, 4] חופף ל־[3, 6], שחופף ל־[5, 7], ולכן שלושת הטווחים מתאחדים ל־[1, 7]. [12, 14] מתחיל אחרי 7 ונשאר בפני עצמו.
challenge icon

שאלת המשך

המרווחים מגיעים כשהם כבר מאוחדים וממוינים לפי נקודת ההתחלה, ועליך להוסיף מרווח חדש אחד. האם תוכל להחזיר את הרשימה המאוחדת בזמן O(n), בלי למיין שוב?

איפוס הקוד
def mergeIntervals(starts, ends):
    # כתבו כאן את הקוד

בדיקה #1

בדיקה #2

ארגומנטים

starts = [5, 1, 12, 3]
ends = [7, 4, 14, 6]

הפלט הצפוי

[[1, 7], [12, 14]]