class Solution {
public:
/*
* @param : A list of integers
* @param : An integer
* @return: The median of the element inside the window at each moving
*/
vector<int> medianSlidingWindow(vector<int> nums, int k) {
// write your code here
int size=nums.size();
vector<int> res;
if(size<k|size==0){
return res;
}
for(int i=0;i<size-k+1;++i){
for(int j=i;j<k+i;++j){
addnum(nums[j]);
}
res.push_back(maxPQ.top());
while(!maxPQ.empty()){
maxPQ.pop();
}
while(!minPQ.empty()){
minPQ.pop();
}
numOfElements=0;
}
return res;
}
priority_queue<int> maxPQ;
priority_queue<int, vector<int>, greater<int> > minPQ;
vector<int> ans;
int numOfElements = 0;
void addnum(int value){
maxPQ.push(value);
if(numOfElements%2==0){
if(minPQ.empty()){
numOfElements++;
return ;
}else if(maxPQ.top()>minPQ.top()){ // 偶数个 0 1 2 3 4
int r1=maxPQ.top();
int r2=minPQ.top();
maxPQ.pop();
minPQ.pop();
maxPQ.push(r2);
minPQ.push(r1);
}
}else{
minPQ.push(maxPQ.top());
maxPQ.pop();
}
numOfElements++;
}
};