【剑指offer】面试题59 - II. 队列的最大值

解题思路

利用两个队列实现队列的最大值
这道题目和59-1.滑动窗口的最大值类似,对于入栈处理方式相同,难点在于出栈的实现。
通过手动模拟出每次插入数据后,两个队列的情况,可以慢慢找到规律,所以对于这类题目思想上就是开始时多尝试通过手动模拟,找到一些规律,这样就容易下手
如对于[1,3,-1,5]这个序列的模拟,参考如下
image.png

代码

class MaxQueue {
public:
	deque<int> dq_data;
	deque<int> dq_max;
	MaxQueue() {

	}
	//获取最大值
	int max_value() {
		if (dq_max.size() == 0) return -1;
		return dq_max.front();
	}
	//入栈
	void push_back(int value) {
		dq_data.push_back(value);
		while (!dq_max.empty()&&dq_max.back() < value) {
				dq_max.pop_back();
			}
		dq_max.push_back(value);
	}
	//出栈
	int pop_front() {
		//栈为空
		if (dq_data.size() == 0) return -1;
		int res=dq_data.front();
		//如果当前元素,和dq_max的栈顶元素相同,栈顶元素也要出栈,如果不同,则不需要出栈;
		if (dq_data.front() == dq_max.front()) dq_max.pop_front();
        dq_data.pop_front();
		return res;
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值