• 编程之美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();
    }




  • 相关阅读:
    spring boot学习01【搭建环境、创建第一个spring boot项目】
    C#窗体学生成绩管理系统
    七、整合SQL基础和PL-SQL基础
    六、异常处理概念
    五、PL/SQL循环、游标、函数和过程
    四、SQL基础知识--约束和视图
    三、Oracle常用内置函数
    二、事务
    一、SQL基础知识点补充
    前端未掌握知识点记录
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5253773.html
Copyright © 2020-2023  润新知