[Twitter] Max Stack

Question:

Design a max stack using one stack. ?

One stack? I think it is two stacks.


class MaxMinStack<T>
{
  private Stack<T> data;
  private Stack<T> max;
  private Stack<T> min;
  private Comparator<T> comparator;
  
  public MaxMinStack<T>(Comparator comparator)
  {
      Validate.notNull(comparator);
      data = new Stack<>();
      min = new Stack<>();
      max = new Stack<>();
      this.comparator = comparator;
  }
  
  public void push(T t)
  {
      Validate.notNull(t);
      
      data.push(t);
      
      if (max.empty() || comparator.compare(t, max.peek()) >= 0)
      {
          max.push(t);
      }
      
      if (min.empty() || comparator.compare(t, min.peek()) <= 0)
      {
          min.push(t);
      }
  }
  
  public T pop()
  {
      if (data.empty())
          return null;
          
      T t = data.pop();
      if (comparator.compare(t, max.peek()) == 0)
          max.pop();
      if (comparator.compare(t, max.peek()) == 0)
          min.pop();
      return t;
  }
  
  public T max()
  {
      return max.empty() ? null : max.peek();
  }
  
  public T min()
  {
      return min.empty() ? null : min.peek();
  }
}
时间: 2024-10-08 17:20:37

[Twitter] Max Stack的相关文章

[LeetCode] Max Stack 最大栈

Design a max stack that supports push, pop, top, peekMax and popMax. push(x) -- Push element x onto stack. pop() -- Remove the element on top of the stack and return it. top() -- Get the element on the top. peekMax() -- Retrieve the maximum element i

716. Max Stack

Design a max stack that supports push, pop, top, peekMax and popMax. push(x) -- Push element x onto stack. pop() -- Remove the element on top of the stack and return it. top() -- Get the element on the top. peekMax() -- Retrieve the maximum element i

716. Max Stack - Easy

Design a max stack that supports push, pop, top, peekMax and popMax. push(x) -- Push element x onto stack. pop() -- Remove the element on top of the stack and return it. top() -- Get the element on the top. peekMax() -- Retrieve the maximum element i

ELK stack 学习记录

ELK日志分析平台学习记录 首先ELK主要指elasticsearch .logstash 和kibana,三个开源软件组合而成的一套日志平台解决方案.可以将平时收集到的日志,通过前台展示出来,并且可以加以分析,理论上可以解放劳动力(再也不用干上生产取日志这种活了--很搓). 最近在研究ELKstack日志分析平台,网上相关的中文资料不多.所以呢也就写了这篇文章将自己的一些学习认识总结记录下来,基本偏实战,概念理论较少,概念这块,我想以后可以再开一篇文章来做一个阐述总结. 这篇文章中会先讲一下搭

Google interview question: count bounded slices(min/max queue)

Question: A Slice of an array said to be a Bounded slice if Max(SliceArray)-Min(SliceArray)<=K. If Array [3,5,6,7,3] and K=2 provided .. the number of bounded slice is 9, first slice (0,0) in the array Min(0,0)=3 Max(0,0)=3 Max-Min<=K result 0<=2

stack(顺序、链式及应用)

(java版) 1. 顺序栈的实现 顺序栈实现1 [java] package lang; import java.io.Serializable; import java.util.Arrays; /** * @ClassName: ArrayStack * @Description: 顺序栈 * @date 2014年1月20日 上午8:47:19 * @param <T> */ public class ArrayStack<T> implements Serializabl

LeetCode Problems List 题目汇总

No. Title Level Rate 1 Two Sum Medium 17.70% 2 Add Two Numbers Medium 21.10% 3 Longest Substring Without Repeating Characters Medium 20.60% 4 Median of Two Sorted Arrays Hard 17.40% 5 Longest Palindromic Substring Medium 20.70% 6 ZigZag Conversion Ea

【LeetCode】设计题 design(共38题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [146]LRU Cache [155]Min Stack [170]Two Sum III - Data structure design [173]Binary Search Tree Iterator [208]Implement Trie (Prefix Tree) [211]Add and Search Word - Data structure desig

BZOJ 1185 HNOI 2007 最小矩形覆盖 旋转卡壳

题目大意:给出平面上的一些点,问面积最小的矩形满足覆盖所有的点. 思路:覆盖问题和不是凸包上的点没关系,先做凸包.根据贪心的思想,这个覆盖了所有点的矩形肯定至少有一条边与凸包上的边重合,那么我们枚举凸包上的每一条边,对于这个已经确定了一条边的矩形,不难确定其他三个边.注意到已知当前直线的向量,就可以求出两侧和对面的向量,而这三个向量随着枚举的边的移动是单调的,所以就可以用旋转卡壳来卡住剩下的三条边. 但是旋转卡壳时的初值会出问题,如果按照逆时针的顺序求出剩下的三条边的时候,要想通过向量直接卡第三