题解 | #滑动窗口的最大值#

滑动窗口的最大值

https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

《较难》就这啊😅我以为多难呢

思路:拿一个队列装每一轮窗口的值,并且考虑上一个窗口的最大值是否被排出去,如果是,则重新比较队列里的值,如果不是,则只需比较新进来的值和上一个窗口的最大值,并更新最大值。

class Solution {
  public:
    int q_max(vector<int> arr) {
        int max = arr[0];
        for (int i = 0; i < arr.size(); i++)max = (arr[i] > max) ? arr[i] : max;
        return max;
    }
    vector<int> maxInWindows(vector<int>& num, int size) {
        vector<int> res;
        if (!size || size > num.size()) return res;
        vector<int> query;
        for (int i = 0; i < size; i++) query.push_back(num[i]);

        int pre;
        for (int i = size - 1; i < num.size(); i++) {
            if (i == size - 1) {
                res.push_back(q_max(query));
            } else {
                pre = query.front();
                query.erase(query.begin());
                query.push_back(num[i]);
                if (pre != res.back()) res.push_back((res.back() > query.back()) ? res.back() :
                                                         query.back());
                else res.push_back(q_max(query));
            }
        }
        return res;
    }
};

全部评论

相关推荐

喜欢飞来飞去的雪碧在刷代码:可以试一试字节
点赞 评论 收藏
分享
如题,只有过一段小厂实习经历,秋招会很吃亏吗?
陈100:你觉得你进入小厂实习后,实习前和实习后技术水平有提升没? 有的话,肯定有帮助
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务