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();
    }




  • 相关阅读:
    关于网页代码加密解密保护,保障页面安全
    DS--知识积累
    知识积累
    Nested DollsHDU1677
    CF335B
    HDU2385Stock
    滚动数组处理数据很大的公共子序列问题
    HDU4635
    HDU4638
    HDU4639
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5253773.html
Copyright © 2011-2022 走看看