Swift-最小值栈

题目:设计一个栈结构,满足一下条件: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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 一、栈 1.1 栈的实现 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。java没有栈这样的数据结...
    yjaal阅读 1,475评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,897评论 25 709
  • 1.做这件事的目的是什么?还有吗?2.做这件事目标是什么?还有吗?3.做这件事要取得什么成果?还有吗?4.为了获得...
    吴黄龙本人阅读 191评论 0 0
  • “你们采访完能帮我给学校求求情吗?”王小明在微信上问。因为微博上一段短视频突然火起来的萌萌森现在跟视频中的他好像两...
    给我个大西瓜吧阅读 467评论 0 1