美文网首页
Swift-最小值栈

Swift-最小值栈

作者: FlyElephant | 来源:发表于2017-05-06 15:25 被阅读44次

题目:设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1).

push和pop默认都比较好实现,min可以通过遍历试下,但是时间复杂度不符合要求,因为可以通过另外的栈存储最小值.

核心代码:
<pre><code>`class MinStack {

var stack:[Int] = []
var minStack:[Int] = []

func push(value:Int) {
    stack.append(value)
    
    let minValue:Int? = min()
    if minValue == nil  || value <= minValue! { // 与最小值相等的时候说明有重复数据
        minStack.append(value)
    }
}

func pop() {
    
    if stack.count == 0 {
        return
    }
    
    let value:Int = stack.last!
    stack.removeLast()
    
    if value == min() {
        minStack.removeLast()
    }
    
}

func min() -> Int? {
    if minStack.count == 0 {
        return nil
    }
    return minStack.last!
}

}`</code></pre>

测试代码:
<pre><code>`var minStack:MinStack = MinStack()
var minData:[Int] = [6, 5, 7, 3, 3, 8, 1, 10]
for i in 0..<minData.count {
minStack.push(value: minData[i])
}

for i in 0..<3 {
minStack.pop()
}
print("FlyElephant---minStack的数组-----(minStack.stack)---最小值--(minStack.minStack)")`</code></pre>

相关文章

  • Swift-最小值栈

    题目:设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1). push和pop默认都比...

  • 栈系列之-获取最小值

    一、栈获取最小值算法概述 获取栈的最小值算法:可以动态的获取一个栈中元素的最小值,动态的意思是,当该栈发生push...

  • 二.栈 4 带有取最小值min方法的栈

    问题:实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 ...

  • 12. 带最小值操作的栈

    12. 带最小值操作的栈 描述 笔记 数据 评测 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最...

  • lintcode 带最小值操作的栈

    实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min...

  • 求一个动态栈的最小值

    以{3,4,2,1}为例,求push和pop的时候的最小值 使用一个数据栈存储数据,一个辅助栈存储当前最小值,取栈...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 腾讯笔试--逛街

    主要的知识点是:单调栈,该题牢牢记得:栈中记录当前楼能看到的元素 单调栈是单调递增栈,栈顶是最小值单调栈存的是能看...

  • 【练习】实现一个栈

    实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) 使用两个栈...

  • jvm调优参数

    内存区域 栈 -Xss 堆 -Xms最小值-Xmx最大值-Xmn新生代最小-XX:newSize新生代最小值-XX...

网友评论

      本文标题:Swift-最小值栈

      本文链接:https://www.haomeiwen.com/subject/tmaetxtx.html