龙空技术网

蹲在马桶看算法(Day17—面试实录之常数时间获取队列元素最大值)

Techsnail 159

前言:

现在大家对“坐在马桶上看算法6”大概比较珍视,兄弟们都需要剖析一些“坐在马桶上看算法6”的相关资讯。那么小编在网摘上收集了一些对于“坐在马桶上看算法6””的相关内容,希望你们能喜欢,我们一起来了解一下吧!

题目:

设计一个自己的数据结构,满足添加元素会加入到尾部,删除元素从首部删除。并且实现能在常数时间内获取其最小值。

题目理解:

显然,增加和删除是“先进先出”的操作。那么这种数据结构就是队列。那么如何在常数时间内获得队列中的大值呢?

思路:设计一个辅助栈,始终让栈顶存储元素的最大值。

import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class MaxQueue {	private Stack<Integer> maxStack;	private Queue<Integer> ansQueue;	public MaxQueue() {		maxStack=new Stack<>();		ansQueue=new LinkedList<>();	}	public void enQueue(int e) {		if (maxStack.isEmpty()||maxStack.peek()<e) {			maxStack.add(e);		}else {			maxStack.add(maxStack.peek());		}		ansQueue.add(e);	}	public void deQueue() {		if (ansQueue.isEmpty()) {			return;		}		maxStack.remove(0);		ansQueue.remove();	}	public int getMax() {		return maxStack.peek();	}}

后记:与之对应的leetcode155()最小栈类似。这个比起leetcode的需要稍微的转个弯。

标签: #坐在马桶上看算法6