Menu
CoddyTech

Merge k Sorted Lists

מקבלים k רשימות של מספרים שלמים כשורות של lists. כל שורה ממוינת בסדר לא יורד, השורות יכולות להיות באורכים שונים, ואף שורה אינה ריקה.

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

פונקציה

mergeKLists(lists: integer-2d-array) → integer-array
listsinteger-2d-array
הרשימות הממוינות, אחת בכל שורה, שאורכן עשוי להיות שונה
מחזירהinteger-array
כל הערכים מכל השורות, ברשימה ממוינת אחת

אילוצים

  • 1 ≤ lists.length ≤ 104
  • 1 ≤ lists[i].length, ובכל השורות יחד יש לכל היותר 104 ערכים
  • -104 ≤ lists[i][j] ≤ 104
  • כל שורה ממוינת בסדר לא יורד.

דוגמאות

קלט
lists = [[2, 6, 9], [1, 4, 10], [3, 5]]
פלט
[1, 2, 3, 4, 5, 6, 9, 10]
הסבר
הערך הקטן ביותר בסך הכול הוא 1, הערך הראשון בשורה השנייה. אחריו השורות מתחילות ב־2, 4 ו־3, לכן 2 הוא הבא, וכך הלאה. השורה השלישית מסתיימת אחרי 5, כך שבסוף נשארים 6, 9 ו־10.

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

challenge icon

שאלת המשך

מצא את הטווח הקטן ביותר [a, b] שמכיל לפחות ערך אחד מכל שורה. האם אותה ערימה של ראשי השורות, בתוספת הראש הגדול ביותר עד כה, יכולה למצוא אותו ב־O(N log k)?

איפוס הקוד
def mergeKLists(lists):
    # כתבו כאן את הקוד
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

lists = [[2, 6, 9], [1, 4, 10], [3, 5]]

צפוי

[1, 2, 3, 4, 5, 6, 9, 10]