zoukankan      html  css  js  c++  java
  • 编程之美3.7 队列中最大值问题

          这道题目的意思是,有一个队列。它里面会存储一些数值。如今,要求你须要在 O(1) 的时间内返回这个队列中最大的那个值。

          这道题目的和栈中最大值最小值问题是一样的解法,都是须要一个辅助的东西。对于这道题目,我须要的是一个辅助队列。

          因为是须要找到最大值,我的做法是,假设辅助队列为空。那么,当数据入队列的时候就须要同一时候放入队列和辅助队列中;假设辅助队列不为空,可是入队列的那个元素比辅助队列的队首元素大或者相等。那么。也是须要同一时候放入两个队列中;其它情况,仅仅须要放入队列中就能够了。当出队列的时候,假设队列的队首元素和辅助队列的队首元素同样,那么须要队列和辅助队列同一时候删掉队首元素。

          有了上述的思想,我们不难得到例如以下的代码:

          函数声明:

    /*3.7 队列中最大值问题*/
    class DutQueue
    {
    public :
    	void	DutEnQueue(int);
    	int		DutFront();
    	void	DutPop();
    	int		DutMaxElement();
    
    private :
    	std :: queue<int> q1, q2;
    };

          源码:

    void DutQueue :: DutEnQueue(int v)
    {
    	this -> q1.push(v);
    
    	if (this -> q2.empty())
    		this -> q2.push(v);
    	else if (this -> q2.front() <= v)
    		this -> q2.push(v);
    }
    
    int DutQueue :: DutFront()
    {
    	return this -> q1.front();
    }
    
    void DutQueue :: DutPop()
    {
    	if (this -> q1.front() == this -> q2.front())
    	{
    		this -> q1.pop();
    		this -> q2.pop();
    	}
    	else
    		this -> q1.pop();
    }
    
    int DutQueue :: DutMaxElement()
    {
    	return this -> q2.front();
    }




  • 相关阅读:
    %
    【收藏】Javascript调用后台代码的方法
    C++Builder2010中配置OpenCV2.2
    【收藏】Visual studio 2008 && 2010 快捷键大全
    队列的练习
    哈希表
    poj 3750 链表
    C/C++内存存储 mark在此
    二叉树,深搜,广搜
    链表的练习
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5253773.html
Copyright © 2011-2022 走看看