美文网首页算法每日一刷
155. 最小栈(Swift)

155. 最小栈(Swift)

作者: entre_los_dos | 来源:发表于2019-07-05 14:22 被阅读0次

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/min-stack

    题目

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

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

    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin();   --> 返回 -3.
    minStack.pop();
    minStack.top();      --> 返回 0.
    minStack.getMin();   --> 返回 -2.
    

    定义一个数组,和一个minNum放最小值。
    或者定义一个栈。用两个栈来处理。

    方法1-定义最小值

    class MinStack {
        
        /** initialize your data structure here. */
        var stackArr:[Int] = [Int]()
        var minNum:Int = Int()
        
        
        init() {
            
        }
        
        func push(_ x: Int) {
            
            stackArr.append(x)
            if stackArr.count == 1 {
                minNum = x
            }else {
                minNum = (minNum > x) ? x :minNum
            }
        }
        
        func pop() {
            if stackArr.count > 0 {
                if minNum == stackArr.last {
                    let arr = stackArr.sorted()
                    if arr.count > 1 {
                        minNum = arr[1]
                    }else {
                        minNum = 0
                    }
                }
                stackArr.removeLast()
            }
        }
        
        func top() -> Int {
            if stackArr.count > 0 {
                return stackArr.last!
            }
            return 0
        }
        
        func getMin() -> Int {
            if stackArr.count > 0 {
                return minNum
            }
            return 0
        }
    }
    

    方法2-两个栈

    struct StackInt {
        var stackArr = [Int]()
        var count: Int {
            return stackArr.count
        }
        
        mutating func push(_ x: Int) -> Void {
            stackArr.append(x)
        }
        mutating func pop() -> Int? {
            return stackArr.popLast()
    
        }
        func top() -> Int? {
            return stackArr.last
        }
      
        
    }
    class MinStack {
        
        /** initialize your data structure here. */
        
        var stack = StackInt()
        var minStack = StackInt()
        
        
        
        init() {
            
        }
        
        func push(_ x: Int) {
            
            stack.push(x)
            if (minStack.top() == nil) {
                minStack.push(x)
            }else if(minStack.top()! >= x) {
                minStack.push(x)
            }
        }
        
        func pop() {
            
            let stackLast = stack.pop()
            if stackLast == minStack.top() {
                minStack.pop()
            }
        }
        
        func top() -> Int {
            
            return stack.top() ?? 0
        }
        
        func getMin() -> Int {
            return minStack.top() ?? 0
        }
    }
    

    最后

    欢迎留言区出现更好的方法~~哈哈

    相关文章

      网友评论

        本文标题:155. 最小栈(Swift)

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