Menu
CoddyTech

Insert Interval

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

מקבלים מרווחים ממוינים לפי נקודת ההתחלה בשני מערכים: מרווח i הוא [starts[i], ends[i]], ואף שני מרווחים אינם חופפים או נוגעים זה בזה. הוסיפו את המרווח החדש [newStart, newEnd], מזגו אותו עם כל מרווח שהוא חופף או נוגע בו, והחזירו את כל המרווחים כזוגות [start, end] ממוינים לפי נקודת ההתחלה.

מרווחים נוגעים זה בזה כאשר אחד מסתיים במקום שבו השני מתחיל, כמו [2, 4] ו-[4, 8], ומרווחים שנוגעים זה בזה מתמזגים. ל-[1, 2] ול-[3, 4] אין נקודה משותפת, ולכן הם נשארים נפרדים.

פונקציה

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

אילוצים

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: המרווחים ממוינים לפי נקודת ההתחלה, ואף שניים מהם אינם חופפים או נוגעים זה בזה.
  • 0 ≤ newStart ≤ newEnd ≤ 105

דוגמאות

קלט
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
פלט
[[1, 3], [5, 12], [15, 18]]
הסבר
[6, 11] חופף ל־[5, 7] ול־[10, 12], ולכן שלושת הטווחים הופכים ל־[5, 12]. [1, 3] מסתיים לפני 6 ו־[15, 18] מתחיל אחרי 12, ולכן שניהם נשארים.
challenge icon

שאלת המשך

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

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

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

starts = [1, 5, 10, 15]
ends = [3, 7, 12, 18]
newStart = 6
newEnd = 11

הפלט הצפוי

[[1, 3], [5, 12], [15, 18]]