Menu
CoddyTech

Non-overlapping Intervals

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

כתוב פונקציה בשם eraseOverlapIntervals שמחזירה את המספר הקטן ביותר של מקטעים שעליך להסיר.

פונקציה

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
תחילתו של כל מקטע
endsinteger-array
סוף כל מקטע, באותו אינדקס כמו תחילתו
מחזירהinteger
המספר הקטן ביותר של קטעים שיש להסיר כדי שהקטעים הנותרים לא יחפפו

אילוצים

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • המרווחים אינם ממוינים. שני מרווחים עשויים להיות זהים.

דוגמאות

קלט
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
פלט
2
הסבר
בסדר ההתחלה, הטווחים הם [1,4], [2,3], [3,6] ו-[5,7]. השאר את [2,3] ואת [3,6], שרק נוגעים זה בזה, והסר את 2 האחרים. אי אפשר להשאיר שלושה: [1,4] חופף ל-[2,3], ו-[3,6] חופף ל-[5,7], ובכל שלושה מתוך הארבעה מופיע אחד מהזוגות האלה.

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

challenge icon

שאלת המשך

נניח שלכל מקטע יש גם ערך, ואתם רוצים למצוא את הערך הכולל הגדול ביותר של מקטעים שאינם חופפים. האם השארת המקטע שמסתיים ראשון עדיין תעבוד? במה הייתם משתמשים במקום זאת?

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

מקרה 1

מקרה 2

מקרה 3

קלט

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

צפוי

2