zoukankan      html  css  js  c++  java
  • 剑指offer(20)包含min函数的栈

    题目描述

    定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

    题目分析

    首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的数据进行比较,所以肯定需要一个临时栈嘛,当然这只是一种思路,就是其余的操作pop,push这些和栈的操作一样,只是min的时候借助下临时栈将原来栈弹出来的保存下,以便放回去。

    另外一种思路,也就是剑指offer里面推荐的思路就是增加了一个辅助栈,每次压入数据栈时,把当前栈里面最小的值压入辅助栈当中。这样辅助栈的栈顶数据一直是数据栈中最小的值。

    比如,data中依次入栈,  54381011121
      则min依次入栈,   543, 3,  3,  3,  3, 1

    代码

    const stack = [],
      minStack = [];
    let tmp = null;
    function push(node) {
      if (tmp !== null) {
        if (tmp > node) {
          tmp = node;
        }
        stack.push(node);
        minStack.push(tmp);
      } else {
        tmp = node;
        stack.push(node);
        minStack.push(tmp);
      }
    }
    function pop() {
      stack.pop();
      minStack.pop();
    }
    function top() {
      return stack[stack.length - 1];
    }
    function min() {
      return minStack[minStack.length - 1];
    }
  • 相关阅读:
    区间覆盖(线段树)
    差分约束
    二维数组
    P1195 口袋的天空
    dp的刷表法和填表法
    P1284 三角形牧场
    数据库课程设计
    具体解释VB中连接access数据库的几种方法
    android之PackageManager简单介绍
    Oracle fga审计有这几个特性
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/min.html
Copyright © 2011-2022 走看看