Menu
CoddyTech

Find Median from Data Stream

קשהערימהpython iconjava iconcpp iconc iconjs icon+10

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

פעולה i היא ops[i], כאשר values[i] מכיל את המספר עבור addNum ואת 0 עבור findMedian. הרץ אותן לפי הסדר על מבנה ריק והחזר מחרוזת אחת עבור כל פעולה: "null" עבור addNum, ואת החציון עבור findMedian. כתוב את החציון כך: "3", "2.5" או "-0.5": ללא נקודה עשרונית עבור מספר שלם, ואפס כ-"0", לעולם לא "-0".

פונקציה

medianStreamOps(ops: string-array, values: integer-array) → string-array
opsstring-array
הפעולות, לפי סדר ביצוען
valuesinteger-array
המספר עבור כל addNum, 0 עבור כל findMedian
מחזירהstring-array
תשובה אחת לכל פעולה, כטקסט

אילוצים

  • 1 ≤ ops.length ≤ 3000
  • values.length == ops.length
  • כל ops[i] הוא addNum או findMedian.
  • -105 ≤ values[i] ≤ 105 עבור addNum, ו־values[i] == 0 עבור findMedian.
  • findMedian נקראת רק אחרי לפחות קריאה אחת ל־addNum.

דוגמאות

קלט
ops = ["addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian"]values = [5, 0, 1, 0, 8, 0, 3, 0]
פלט
["null", "5", "null", "3", "null", "5", "null", "4"]
הסבר
עם 1 ו־5 החציון הוא (1 + 5) / 2 = 3. עם 1, 5 ו־8 הוא 5, ועם 1, 3, 5 ו־8 הוא (3 + 5) / 2 = 4.
challenge icon

שאלת המשך

אם כל הערכים היו בין 0 ל־100, איך היית יכול לגרום לשתי הפעולות לפעול בזמן קבוע?

איפוס הקוד
def medianStreamOps(ops, values):
    # כתבו כאן קוד

בדיקה #1

בדיקה #2

ארגומנטים

ops = ["addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian"]
values = [5, 0, 1, 0, 8, 0, 3, 0]

הפלט הצפוי

["null", "5", "null", "3", "null", "5", "null", "4"]