Menu
CoddyTech

Find Median from Data Stream

어려움힙python iconjava iconcpp iconc iconjs icon+10

두 가지 연산을 지원하는 구조를 설계하세요. addNum은 정수를 저장하고, findMedian은 지금까지 저장된 모든 값의 중앙값을 반환합니다. 개수가 홀수이면 중앙값은 가운데 값이고, 짝수이면 가운데 두 값의 평균입니다.

연산 i는 ops[i]이며, values[i]에는 addNum일 때 해당 숫자가, findMedian일 때 0이 들어 있습니다. 빈 구조에서 연산을 순서대로 실행하고, 각 연산마다 문자열 하나를 반환하세요. addNum에는 "null"을, findMedian에는 중앙값을 반환합니다. 중앙값은 "3", "2.5" 또는 "-0.5"처럼 표기하세요. 정수에는 소수점을 붙이지 않고, 0은 "0"으로 표기하며 "-0"은 사용하지 않습니다.

함수

medianStreamOps(ops: string-array, values: integer-array) → string-array
opsstring-array
실행되는 순서대로 연산
valuesinteger-array
각 addNum에 대한 숫자, 각 findMedian에 대해 0
반환값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"]