美文网首页力扣精解
初级算法-设计问题-最小栈

初级算法-设计问题-最小栈

作者: coenen | 来源:发表于2021-09-12 07:39 被阅读0次

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

  • push(x) ------ 将元素 x 推入栈中
  • pop() ------ 删除栈顶的元素
  • top() ------ 获取栈顶的元素
  • getMin() ------ 检索栈中的最小元素
摘一个示例做个说明.
示例 1:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]

输出:
[null,null,null,null,-3,null,0,-2]

解释:
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. 栈设计,就是所谓的压入栈,弹出栈操作
  2. 最小元素获取 -> 需要快速获取最小值
解决思路1:
  1. 根据分析1,采用数据结构数组进行操作
  2. 设计最小值
利用数组的特性进行压入、弹出操作,设计最小值属性,直接返回
class MinStack {
    /// 栈数据存储
    var data: [Int] = []
    /// 最小值
    var minNum: Int?

    init() {
    }
    
    func push(_ val: Int) {
        /// 入栈,数组加操作,然后对比最小值
        self.data.append(val)
        minNum = min(minNum ?? .max, val)
    }
    
    func pop() {
        /// 出栈
        let last = self.data.popLast()
        /// 最小值判断
        if last == minNum {
            minNum = self.data.min()
        }
    }
    
    func top() -> Int {
        return self.data.last!
    }
    
    func getMin() -> Int {
        return minNum!
    }
}
最小栈提交结果.jpg

测试用例:

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

考察要点:

  • 设计

相关文章

  • 初级算法-设计问题-最小栈

    设计一个支持push、pop、top 操作,并能在常数时间内检索到最小元素的栈. push(x) ------ 将...

  • LeetCode初级算法--设计问题02:最小栈

    LeetCode初级算法--设计问题02:最小栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小...

  • 算法设计 --- 最小栈

    算法描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) ...

  • 栈系列之-获取最小值

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

  • 算法与数据结构(十) 总结

    课程总结 过程: 线性问题: 树形问题: 图论问题: 更多算法问题 算法设计相关: 贪心:从最小到最大,或从最大到...

  • 栈--最小栈问题

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

  • (初级)8.最小栈

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

  • LeetCode初级算法--设计问题01:Shuffle an

    LeetCode初级算法--设计问题01:Shuffle an Array (打乱数组) 搜索微信公众号:'AI-...

  • 每日Leetcode—算法(14)

    141.环形链表 算法(快慢指针): 155.最小栈 算法一: 算法二: 167. 两数之和 II - 输入有序数...

  • LeetCode:最小栈

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

网友评论

    本文标题:初级算法-设计问题-最小栈

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