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]
הסבר
השורות מתחילות ב־2, 1 ו־3, לכן 1 מגיע ראשון. הראשים הם אז 2, 4 ו־3, לכן 2 בא אחריו, וכן הלאה. השורה השלישית מסתיימת אחרי 5, ומשאירה את 6, 9 ו־10.
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]