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, ולכן שניהם נשארים כפי שהם.

lock icon+20 בדיקות נסתרות בשליחה

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]]