Menu
CoddyTech

Find Median from Data Stream

KhóHeappython iconjava iconcpp iconc iconjs icon+10

Thiết kế một cấu trúc có hai thao tác: addNum lưu một số nguyên, còn findMedian trả về trung vị của tất cả giá trị đã lưu đến thời điểm hiện tại. Nếu có số lượng giá trị lẻ, trung vị là giá trị ở giữa; nếu có số lượng giá trị chẵn, trung vị là trung bình của hai giá trị ở giữa.

Thao tác i là ops[i], trong đó values[i] chứa số cần lưu cho thao tác addNum và chứa 0 cho thao tác findMedian. Thực hiện các thao tác theo thứ tự trên một cấu trúc rỗng và trả về một chuỗi cho mỗi thao tác: "null" cho addNum, trung vị cho findMedian. Viết trung vị như "3", "2.5" hoặc "-0.5": không có dấu thập phân nếu là số nguyên, và số 0 phải viết là "0", không bao giờ viết "-0".

Hàm

medianStreamOps(ops: string-array, values: integer-array) → string-array
opsstring-array
các phép toán theo thứ tự thực hiện
valuesinteger-array
số lượng cho mỗi addNum, 0 cho mỗi findMedian
Trả vềstring-array
một câu trả lời cho mỗi phép toán, dưới dạng văn bản

Ràng buộc

  • 1 ≤ ops.length ≤ 3000
  • values.length == ops.length
  • Mỗi ops[i] là addNum hoặc findMedian.
  • -105 ≤ values[i] ≤ 105 đối với addNum, và values[i] == 0 đối với findMedian.
  • findMedian chỉ được gọi sau khi đã gọi addNum ít nhất một lần.

Ví dụ

Đầu vào
ops = ["addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian", "addNum", "findMedian"]values = [5, 0, 1, 0, 8, 0, 3, 0]
Đầu ra
["null", "5", "null", "3", "null", "5", "null", "4"]
Giải thích
Với 1 và 5, trung vị là (1 + 5) / 2 = 3. Với 1, 5 và 8, trung vị là 5, còn với 1, 3, 5 và 8, trung vị là (3 + 5) / 2 = 4.
challenge icon

Câu hỏi mở rộng

Nếu mọi giá trị đều nằm trong khoảng từ 0 đến 100, bạn có thể làm thế nào để cả hai thao tác đều chạy trong thời gian hằng số?

Đặt lại code
def medianStreamOps(ops, values):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Đối số

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

Đầu ra mong đợi

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