代码随想Day13 | 239. 滑动窗口最大值、347.前 K 个高频元素

 239. 滑动窗口最大值 

这道题是一道队列的应用,主要切入的点为队首的元素必须为当前窗口的最大值,因此需要维护一个不递增的双端队列,然后维护其在窗口划出范围外时删除对应的最大值,详细代码如下:

class Solution {
public:
    vector maxSlidingWindow(vector& nums, int k) {
        //双端队列  保证不递增
        deque deq;
        vector res;
        //if(k=nums[i]) deq.push_back(nums[i]);
            else{
                while(!deq.empty()&&deq.back()

 347.前 K 个高频元素 

这道题具体思路不太明晰,学习代码随想录并总结思想:

代码随想Day13 | 239. 滑动窗口最大值、347.前 K 个高频元素_第1张图片

注意需要自定义优先队列的排序规则,此时需要用到仿函数,即一个类似函数的类,类中重载了运算符(),如本题目中的仿函数为:

    class myCompare
    {
        public:
        bool operator()(pair&l,pair&r)
        {
            //小顶堆
            return l.second>r.second;
        }
    };

详细代码如下:

class Solution {
public:
    class myCompare
    {
        public:
        bool operator()(pair&l,pair&r)
        {
            //小顶堆
            return l.second>r.second;
        }
    };
    vector topKFrequent(vector& nums, int k) {
        priority_queue,vector>,myCompare> que;
        unordered_map map;
        vector res;
        //构建哈希表
        for(int i=0;i::iterator it = map.begin();it!=map.end();it++)
        {
            que.push(*it);
            if(que.size()>k) que.pop();
        }

        //取元素
        for(int i=k-1;i>=0;i--)
        {
            res.push_back(que.top().first);
            que.pop();
        }
        return res;


    }
};

 总结 

栈与队列做一个总结吧,加油

代码随想录

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