《剑指offer刷题笔记(9),美团优选面试题Java

minStack.push(-1);

minStack.push(3);

minStack.push(-4);

minStack.getMin(); --> Returns -4.

minStack.pop();

minStack.top(); --> Returns 3.

minStack.getMin(); --> Returns -1.




### [](https://gitee.com/vip204888/java-p7)**思路**



**(单调栈)** O ( 1 ) O(1) O(1)  

我们除了维护基本的栈结构之外,还需要维护一个单调栈,来实现返回最小值的操作。  

下面介绍如何维护单调栈:



*   当我们向栈中压入一个数时,如果该数 ≤ ≤ ≤ 单调栈的栈顶元素,则将该数同时压入单调栈中;否则,不压入,这是由于栈具有先进后出性质,所以在该数被弹出之前,栈中一直 存在一个数比该数小,所以该数一定不会被当做最小数输出。

*   当我们从栈中弹出一个数时,如果该数等于单调栈的栈顶元素,则同时将单调栈的栈顶元素弹出。

*   单调栈由于其具有单调性,所以它的栈顶元素,就是当前栈中的最小数。



**时间复杂度**



四种操作都只有常数次入栈出栈操作,所以时间复杂度都是 O ( 1 ) O(1) O(1).



### [](https://gitee.com/vip204888/java-p7)**总结**



**c++ stack常用函数**



1、`push` `push(x)`将`x`入栈,时间复杂度为 O ( 1 ) O(1) O(1)



2、`top()` `top()`获得栈顶元素,时间复杂度为 O ( 1 ) O(1) O(1)



3、`pop()` `pop()`用以弹出栈顶元素,时间复杂度为 O ( 1 ) O(1) O(1)。



### [](https://gitee.com/vip204888/java-p7)**代码**



class MinStack {

public:

/** initialize your data structure here. */

stack<int> st;

stack<int> stMin; //单调栈,栈顶元素为最小值

MinStack() {

    

}



void push(int x) {

    st.push(x);

    //如果栈为空或者当前元素x小于栈顶元素,当前元素x入栈(维护单调栈)

    if(stMin.empty() || x <= stMin.top()) stMin.push(x);

}



void pop() {

    //如果要出栈的栈顶元素和单调栈的栈顶元素相等,单调栈顶元素出栈。

2021年Java中高级面试必备知识点总结

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。

本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。

目录:

(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

部分内容:

对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注后,点击这里免费获取

,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注后,点击这里免费获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值