剑指 Offer 30. 包含min函数的栈

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 30. 包含min函数的栈相关的知识,希望对你有一定的参考价值。

力扣

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

1

class MinStack 
  constructor () 
    // 存储栈的数据
    this.data = []
  

  // 入栈方法
  push (item) 
    this.data.push(item)
  

  // 出栈方法
  pop () 
    this.data.pop()
  

  top () 
   return this.data[this.data.length - 1]
  

  min () 
    return Math.min(...this.data)
  

2

// 在存储数据的栈外,再新建一个栈,用于存储最小值
class MinStack 
  constructor () 
    // stackA 用于存储数据
    this.stackA = []
    this.countA = 0
    // stackB 用于将数据降序存储(栈顶值为最小值)
    this.stackB = []
    this.countB = 0
  
  // 入栈
  push (item) 
    // stackA 正常入栈
    this.stackA[this.countA++] = item
    // stackB 如果没有数据,直接入栈
    // 如果 item 的值 <= stackB 的最小值,入栈
    if (this.countB === 0 || item <= this.min()) 
      this.stackB[this.countB++] = item
    
  
  // 最小值函数
  min () 
    return this.stackB[this.countB - 1]
  
  // 获取栈顶值
  top () 
    return this.stackA[this.countA - 1]
  
  // 出栈
  pop () 
    // 先进行 stackB 的检测
    // 如果 stackA 的栈顶值 === stackB 的栈顶值,stackB 出栈
    if (this.top() === this.min()) 
      delete this.stackB[--this.countB]
    
    // stackA 出栈
    delete this.stackA[--this.countA]
  


const m = new MinStack()

1

以上是关于剑指 Offer 30. 包含min函数的栈的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 30. 包含min函数的栈 / 剑指 Offer 31. 栈的压入弹出序列

剑指Offer打卡30.包含min函数的栈

剑指Offer打卡30.包含min函数的栈

剑指Offer打卡30.包含min函数的栈

剑指Offer30包含min函数的栈

剑指 Offer 30. 包含min函数的栈