• 栈应用:最小栈(第二题)


    题目:

    设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

    • push(x) -- 将元素 x 推入栈中。
    • pop() -- 删除栈顶的元素。
    • top() -- 获取栈顶元素。
    • getMin() -- 检索栈中的最小元素

    分析:

    1.每次压入两个元素,一个是元素本身,另外一个进行判断,是否为最小,即存放当前栈最小值,代码实现如下

     1 /** initialize your data structure here. */
     2 public MinStack() {
     3     stack = new Stack<Integer>();
     4 }
     5 
     6 public void push(int x) {
     7     if(stack.isEmpty()){
     8         stack.push(x);
     9         stack.push(x);
    10     }else{
    11         int tmp = stack.peek();
    12         stack.push(x);
    13         if(tmp<x){
    14             stack.push(tmp);
    15         }else{
    16             stack.push(x);
    17         }
    18     }
    19 }
    20 
    21 public void pop() {
    22     stack.pop();
    23     stack.pop();
    24 }
    25 
    26 public int top() {
    27     return stack.get(stack.size()-2);
    28 }
    29 
    30 public int getMin() {
    31     return stack.peek();
    32 }

    为什么对着java版写不出来c++的呢?因为c++的stack类里面只有top()回栈顶,不能访问别的

    2.用两个栈实现,一个压元素,一个压最小值,代码实现如下:

     1 class MinStack {
     2 public:
     3     stack<int> data;
     4     stack<int> minstack;
     5     /** initialize your data structure here. */
     6     MinStack() {
     7         
     8     }
     9     
    10     void push(int x) {
    11         data.push(x);
    12         if(minstack.empty() || x <= minstack.top()){
    13             minstack.push(x);
    14         }
    15     }
    16     
    17     void pop() {
    18         if(data.top() == minstack.top()){
    19             minstack.pop();
    20         }                    //进行判断的原因很简单,data里面没有,对应的minstack里面也不应该存在
    21         data.pop();
    22     }
    23     
    24     int top() {
    25         return data.top();
    26     }
    27     
    28     int getMin() {
    29         return minstack.top();
    30     }
    31 };
  • 相关阅读:
    [整理]正睿 CSP 七连测划水
    关于我想了好久才想出这题咋做这档事
    关于我想了好久才想出这题咋做这档事
    关于我想了好久才想出这题咋做这档事
    [考试总结]ZROI-21-NOIP冲刺-TEST11 总结
    关于我想了很久才想出这题咋做这档事
    [题解]POJ3415 Common Substrings
    [题解]CF1073G Yet Another LCP Problem
    [题解]Codeforces Round #751 (Div. 2) 题解
    [考试总结]ZROI-21-NOIP冲刺-TEST10 总结
  • 原文地址:https://www.cnblogs.com/dmndxld/p/10713064.html
Copyright © 2020-2023  润新知