首页 > 其他 > 详细

[Twitter] Max Stack

时间:2015-01-16 17:04:50      阅读:202      评论:0      收藏:0      [点我收藏+]

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!