검지 Offer-JZ 63-데이터 흐름 의 중위 수

제목 설명
어떻게 데이터 흐름 중의 중위 수 를 얻 습 니까?데이터 흐름 에서 홀수 수 수 치 를 읽 으 면 중위 수 는 모든 수치 가 정렬 된 후에 중간 에 있 는 수치 입 니 다.데이터 흐름 에서 짝수 수 수 치 를 읽 으 면 중위 수 는 모든 수치 가 정렬 된 후 중간 두 수의 평균 값 이다.저 희 는 Insert()방법 으로 데이터 흐름 을 읽 고 GetMedian()방법 으로 현재 읽 기 데이터 의 중위 수 를 가 져 옵 니 다.
문제 풀이 의 사고 방향.
데 이 터 를 입력 할 때 큰 뿌리 더미 와 작은 뿌리 더 미 를 유지 하고 큰 뿌리 더미 의 데이터 가 작은 뿌리 더미 의 데이터 보다 작 으 며 작은 뿌리 더미 의 데이터 수가 큰 뿌리 더미 의 데이터 보다 1 이상 많 거나 같 도록 확보한다.중위 수 를 가 져 올 때 크기 의 루트 더미 꼭대기 의 데이터 값 과 크기 의 루트 더미 의 데이터 수 를 통 해 중위 수 를 계산 할 수 있다.
코드 구현
class Solution {
     
private:
    priority_queue<int, vector<int>, less<int>> pqL;
    priority_queue<int, vector<int>, greater<int>> pqG;
public:
    void Insert(int num)
    {
     
        if(pqL.empty() || num <= pqL.top())
            pqL.push(num);
        else    // pqL      num    pqL     
            pqG.push(num);
        //    pqL        pqG       1    
        if(pqL.size() == pqG.size() + 2){
     
            pqG.push(pqL.top());
            pqL.pop();
        }
        if(pqL.size() == pqG.size() - 1){
     
            pqL.push(pqG.top());
            pqG.pop();
        }
    }

    double GetMedian()
    {
      
        return pqL.size() == pqG.size() ? (pqL.top() + pqG.top()) / 2.0 : pqL.top();
    }
};

실행 결과
실행 시간:2ms 메모리 사용량:376 k

좋은 웹페이지 즐겨찾기