算法训练营第十三天|239. 滑动窗口最大值 347. 前 K 个高频元素

239. 滑动窗口最大值

这题真的很难,这个思路很难想到,自己用双端数组维护一个优先级队列。

class Solution {
public:
    vector maxSlidingWindow(vector& nums, int k) {
        MyQueue queue;
        vector res;
        for(int i=0;i que;
        
        void pop(int value){
            if(!que.empty()&&value==que.front()){
                que.pop_front();
            }
        }
        void push(int value){
            while(!que.empty()&&value>que.back()){
                que.pop_back();
            }
            que.push_back(value);
        }
        int max(){
            return que.front();
        }
    };
};

 347. 前 K 个高频元素

用map是可以想到,优先级队列小根堆是第一次用,一直维护住k个就可以了

class Solution {
public:
class Myconpare
{public:
     bool operator()(pair a,pair b){
         return a.second>b.second;
     }

};
    vector topKFrequent(vector& nums, int k) {
        unordered_map hash;
        for(int i=0;i, vector>, Myconpare> pri_que;
        for(auto it:hash){
            pri_que.push(it);
            if(pri_que.size()>k)
            pri_que.pop();
        }
        vector res;
        for(int i=k-1;i>=0;i--){
            
            res.push_back(pri_que.top().first);
            pri_que.pop();
        }
        return res;
    }
};

你可能感兴趣的:(算法,leetcode,数据结构)