码迷,mamicode.com
首页 > 其他好文 > 详细

[Twitter] Max Stack

时间:2015-01-16 17:06:08      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:interview

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


[Twitter] Max Stack

标签:interview

原文地址:http://7371901.blog.51cto.com/7361901/1604694

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!