20 包含min函数的栈

题目:包含min函数的堆栈

要求:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

 

 

 1 import java.util.Stack;
 2 public class Solution {
 3     //借助于辅助栈,一个用来存放元素,一个用来存放最小值
 4     Stack element = new Stack();
 5     Stack minstack = new Stack();
 6     public void push(int node) {
 7         element.push(node);
 8         //如果最小栈为空或者是新输入的值比最小栈的值还要小,则将新数据入站
 9         //强制性转换容易忽略,如果去掉int会如下错误
10         //./Solution.java:19: error: bad operand types for binary operator '>='
11         //ifinstack.empty() || minstack.peek() >= node)
12         //^
13         //first type: Object
14         //second type: int
15         //Note: ./Solution.java uses unchecked or unsafe operations.
16         //Note: Recompile with -Xlint:unchecked for details.
17         //1 error
18         if( minstack.empty() || (int)minstack.peek() >= node)
19             minstack.push(node);
20     }
21     
22     public void pop() {
23         //元素栈正常出栈,但是出栈之前要检查,该元素是否与最小值相等,若相等,则最小值栈也要pop一个元素
24         if(element.empty()) return;
25         if(element.peek() == minstack.peek()){
26             element.pop();
27             minstack.pop();
28         }else{
29             element.pop();
30         }
31     }
32     
33     public int top() {
34         return (int)element.peek(); //强制性转换容易忽略
35     }
36     
37     public int min() {
38         return (int)minstack.peek(); //强制性转换容易忽略
39     }
40 }

 

 

 

本地编译器代码

posted @ 2019-05-16 16:56  淡如水94  阅读(162)  评论(0)    收藏  举报