Swift 最小栈 - LeetCode

2018-12-24 13:57:14 浏览数 (1)

LeetCode

题目: 最小栈

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

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

打乱一个没有重复元素的数组。

示例:
代码语言:javascript复制
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.
方案1:

用数组存数据,top就是最后存的,最小值排序后返回最小的

代码1:

不写了哈、、、运行时间太长、、、没过

方案二:

在方案一的基础上,用一个数组存最小值,pop的时候看是不是最小值,是的最小值数组也pop一个

代码二:
代码语言:javascript复制
class MinStack {
    
    var stackTop: Int?
    var stack: [Int]
    var stackMin: [Int]

    
    /** initialize your data structure here. */
    init() {
        stack = [Int]()
        stackTop = nil
        stackMin = [Int]()
    }
    
    func push(_ x: Int) {
        stackTop = x
        stack.append(x)
        if stackMin.isEmpty {
            stackMin.append(x)
        } else if x <= stackMin.last! {
            stackMin.append(x)
        }
    }
    
    func pop() {
        let top = stack.removeLast()
        if top == stackMin.last! {
            stackMin.removeLast()
        }
        stackTop = stack.last
    }
    
    func top() -> Int {
        return stackTop!
    }
    
    func getMin() -> Int {
        return stackMin.last!
    }
}


/**
 * Your MinStack object will be instantiated and called as such:
 * let obj = MinStack()
 * obj.push(x)
 * obj.pop()
 * let ret_3: Int = obj.top()
 * let ret_4: Int = obj.getMin()
 */
初级这一章节做完了,个人感觉就是路还长,继续努力

路还长

用Swift开始学习算法中,在LeetCode中做初级算法这一章节,这是我做的最后一题,这个最简单章节终于完工了、、、将做的题目在此做个笔记,希望有更好方法同学们cue我哦。

0 人点赞