Leetcode面试经典150题-155.最小栈

2024-08-20 22:12

本文主要是介绍Leetcode面试经典150题-155.最小栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解法都在代码里,不懂就留言或者私信

我写了两种解法,建议选择双栈的,感觉这才是考察点


/**一般解法:过个笔试没问题,建议用双栈的方法 */
class MinStack2 {/**至少应该有一个栈用于保存数据 对于push和pop以及top的话,如果不考虑从栈中获取最小元素,那就是单纯的栈但是因为这个获取最小元素的方法,我们就得准备一个结构用于存放最小值,我这里想到的是最小堆*/Stack<Integer> stack;PriorityQueue<Integer> heap;public MinStack2() {stack = new Stack<>();heap  = new PriorityQueue<>();}public void push(int val) {stack.push(val);heap.add(val);}public void pop() {Integer pop = stack.pop();heap.remove(pop);}public int top() {return stack.peek();}public int getMin() {return heap.peek();}
}/**最优解法:这大概才是人家的考点*/
class MinStack {/**至少应该有一个栈用于保存数据 对于push和pop以及top的话,如果不考虑从栈中获取最小元素,那就是单纯的栈但是因为这个获取最小元素的方法,我们就得准备一个结构用于存放最小值,我这里想到的是最小堆*//**用于做栈的常规操作的栈 */Stack<Integer> stack;/**minStack用来保存当前的最小值 */Stack<Integer> minStack;public MinStack() {stack = new Stack<>();minStack  = new Stack<>();}public void push(int val) {/**stack无论如何是必须要放的*/stack.push(val);/**用于保存最小值的栈只有影响到最小值的时候才放,因为你加入导致最小值改变了那就让你进最小值如果你的出现不影响最小值,那你加入或者删除对于最小值没有任何影响,你进minStack干啥这里要特别注意等于的情况,如果等于minStack的栈顶元素是要入minStack,这里避免重复的只入了一个然后删除的时候直接删了,但是其实我们有好多个*//**如果minStack是空,那stack肯定也是空的,那val的加入就是最小值 */if(minStack.isEmpty() || val <= minStack.peek()) {minStack.push(val);}}public void pop() {if(stack.isEmpty()) {return;}/**无论如何,正常用于操作的栈还是要弹出的 */Integer pop = stack.pop();/**如果要弹出的刚好是当前最小值,则minStack弹出栈顶这里分为两种情况:1 这个值只有一个,那弹出了最小值就变了2. 这个值有多个,那弹出之后顶上这个数少一个总之弹出的前提是它是当前最小值 *//**这个地方注意要用equals,不能用== */if(!minStack.isEmpty() && minStack.peek().equals(pop)) {minStack.pop();}}/**要的是真实的栈顶值 */public int top() {return stack.peek();}/**最小值就是最小值栈的栈顶值 */public int getMin() {return minStack.peek();}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/

运行结果

这篇关于Leetcode面试经典150题-155.最小栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091314

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri

poj 2175 最小费用最大流TLE

题意: 一条街上有n个大楼,坐标为xi,yi,bi个人在里面工作。 然后防空洞的坐标为pj,qj,可以容纳cj个人。 从大楼i中的人到防空洞j去避难所需的时间为 abs(xi - pi) + (yi - qi) + 1。 现在设计了一个避难计划,指定从大楼i到防空洞j避难的人数 eij。 判断如果按照原计划进行,所有人避难所用的时间总和是不是最小的。 若是,输出“OPETIMAL",若

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回