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