Deque实现队列

template<class T>
class Dque
{
private:
    deque<T>m_dQue;
public:
    void addfront( T& d)
    {
        m_dQue.push_front(d);
    }
    void addback(const T& d)
    {
        m_dQue.push_back(d);
    }
    void repop()
    {
        m_dQue.pop_front();
    }
    int getSize()
    {
        return m_dQue.size();
    }
    bool getEmpt()
    {
        return m_dQue.empty();
    }
    T& getBegin()
    {
        return *m_dQue.begin();
    }
    T& getEnd()
    {
        return *m_dQue.(--end());
    }
    void display()
    {
        for (int i = 0; i < m_dQue.size(); i++)
        {
            cout << m_dQue.at(i) << endl;
        }
    }
};
int main()
{
    Dque<int>que;
    for (int i = 0; i < 5; i++)
        que.addback(i);
    que.display();
    que.repop();
    que.display();
    que.addback(6);
    que.display();
    cout << que.getBegin() << endl;
    return 0;
}
### 使用 `deque` 实现单调队列 为了实现一个高效的滑动窗口最大值算法,可以利用 Python 中的双端队列 (`collections.deque`) 来构建单调队列。这种数据结构允许在一端或两端快速插入和删除元素。 #### 单调队列的特点 - 只保存有可能成为窗口里最大值的那些元素下标。 - 队列中的元素按照对应的数值大小降序排列,即保持队首始终是当前窗口的最大值[^5]。 #### 关键操作解析 - **入队**: 当新元素加入时,会把队列中所有小于等于该元素的值移除,因为这些较小的值不可能再有机会成为未来的最大值。 - **出队**: 如果即将离开窗口范围的第一个元素正好是最前面的那个大数,则将其弹出;否则不做任何处理。 - **获取最值**: 由于维护的是递减序列,所以每次查询最值只需要访问队首即可获得结果。 下面是具体的代码示例: ```python from collections import deque def maxSlidingWindow(nums, k): if not nums or k == 0: return [] result = [] window = deque() # 存储索引 for i in range(len(nums)): # 移除不在窗口内的元素 if window and window[0] <= i - k: window.popleft() # 维护单调递减性质 while window and nums[i] >= nums[window[-1]]: window.pop() window.append(i) # 添加到结果集中 (当遍历到了至少k个元素之后) if i >= k - 1: result.append(nums[window[0]]) return result ``` 此函数接收两个参数:一个是待处理的一维列表 `nums` ,另一个是指定窗口宽度的正整数 `k` 。它返回一个新的列表,其中包含了每个连续子数组(长度为 `k`)里的最大值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值