滑动窗口中的中间值

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++;
      }

};

猜你喜欢

转载自blog.csdn.net/u010325193/article/details/86517644