美文网首页
2020-04-06 刷题1(队列)

2020-04-06 刷题1(队列)

作者: nowherespyfly | 来源:发表于2020-06-30 21:53 被阅读0次

滑动窗口的最大值

用一个双向队列(两边都开口)deque来存放滑动窗口中可能成为最大值的下标,每读到一个新的数时,如果队列中存在比它小的元素,那么这些元素都不可能成为最大值了,因此,把这些元素从右边出队列;当前元素从右边入队列。因此,队列中的元素总是从左到右递减的,每次要取的窗口最大值就是最列前端。当元素已经超出滑动窗口范围时,根据队列中存放的下标与当前窗口位置的距离,就可以判断出来并且将其出队列。

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        deque<int> my_queue;
        vector<int> max_window;
        if(nums.size() < k) return max_window;
        for(int i = 0; i < nums.size(); i++){
            if(my_queue.size() == k) my_queue.pop_front();
            while(!my_queue.empty() && nums[my_queue.back()] <= nums[i])
                my_queue.pop_back();
            if(!my_queue.empty() && i - my_queue.front() >= k) my_queue.pop_front();
            my_queue.push_back(i);
            if(i >= k - 1)
                max_window.push_back(nums[my_queue.front()]);
        }
        return max_window;
    }
};

相关文章

  • 2020-04-06 刷题1(队列)

    滑动窗口的最大值 用一个双向队列(两边都开口)deque来存放滑动窗口中可能成为最大值的下标,每读到一个新的数时,...

  • leecode刷题(26)-- 用栈实现队列

    leecode刷题(26)-- 用栈实现队列 用栈实现队列 使用栈实现队列的下列操作: push(x) -- 将一...

  • 2019-06-22-用两个栈实现队列

    题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。去刷题

  • LeetCode 刷题集 - 数组、链表、栈、队列(1)

    数组:为什么很多编程语言中数组都从 0 开始编号?[http://time.geekbang.org/column...

  • LeetCode刷题之栈、队列

    栈(Stack) 又名堆栈,它是一种重要的数据结构。从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线性...

  • python-数据结构 循环队列的实现 设计循环队列

    1.设计你的循环队列 Leet Code 原题链接Leet Code 原题动画演示视频设计你的循环队列实现。 循环...

  • 用两个栈实现队列

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:栈 队列 题目描述: 用两个栈来实现一个队列,完成队...

  • 教你怎么做一只考试锦鲤

    考试前14天疯狂刷题,各个平台疯狂刷题,刷题就对了。 刷的越多,大脑记得越多,也许你刷10道题,能记住的只有1道题...

  • 刷题说(1)

    所谓高效刷题,应该是根据结构化思维所呈现出的不足,而进行的针对性提高。 如果按我最近说的框架学习法,那就是去填充框架。

  • leetcode刷题-1

    小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一...

网友评论

      本文标题:2020-04-06 刷题1(队列)

      本文链接:https://www.haomeiwen.com/subject/kuzvphtx.html