力扣hot100-滑动窗口最大值

先提交了一版结果用二重循环超时了。我还奇怪不是【困难】吗?怎么这么简单?原来难在优化了。

cpp 复制代码
class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        int n=nums.size();
        vector<int> m;
        for(int i=0;i<=n-k;i++){
            int max=nums[i];
            for(int j=i+1;j<=k+i-1;j++){
                if(nums[j]>max){
                    max=nums[j];
                }
            }
            m.push_back(max);
        }
        return m;
    }
};

然后我又学习了官方题解,大根堆的方法。学到了一个新的容器:大根堆

priority_queue<int> heap;

heap.push(9); // 放入

heap.top(); // 查看最大的数,不删除

heap.pop(); // 删除最大的数

这里面因为要判断堆顶元素下标,所以用了pair,来同时存放元素和下标。

cpp 复制代码
class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        priority_queue<pair<int,int>> heap;
        vector<int> max;
        int n=nums.size();
        for(int i=0;i<n;i++){
            heap.push({nums[i],i});
            while((!heap.empty())&&(heap.top().second<=(i-k))){
                heap.pop();
            }
            if(heap.size()>=k){
                max.push_back(heap.top().first);
            }
        }
        return max;
    }
};
相关推荐
꧁细听勿语情꧂41 分钟前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫1 小时前
【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱
数据结构·算法·leetcode
专注仿真11 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
罗西的思考12 小时前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习
好悬给我拽开线15 小时前
ZILOT 论文解析
算法
饮水桶_T16 小时前
JAVA IO流笔记
开发语言·数据结构·算法
星夜离尘5617 小时前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi17 小时前
力扣76.最小覆盖子串
算法·leetcode·职场和发展
地平线开发者18 小时前
征程6|用 hrt\_model\_exec 看清 YOLOv5x 的输入、原始输出和后处理
人工智能·算法