Min Stack 最小栈
来源:互联网 发布:linux换行 编辑:程序博客网 时间:2024/06/16 09:56
看到这个最小堆的解题思路,这里自己练习着实现下细节。
主要思路就是两个栈,数据栈是保存原始数据的,另外一个辅助栈的栈顶元素保存当前数据栈中最小元素。
所以获取最小元素就直接读取辅助栈栈顶元素即可,同时数据栈的进栈、出栈的时候要维护辅助栈的栈顶的元素,以同步更新最小元素。
class MinStack {public:/** initialize your data structure here. */MinStack() {curIdx = -1;//初始化arr栈顶索引curMin = -1;//初始aux栈顶索引maxCap = 10;arr = new int[maxCap];memset(arr, 0, maxCap);aux = new int[maxCap];memset(aux, 0, maxCap);}void push(int x) {if(curIdx + 1 >= maxCap){int* arrtmp = new int[maxCap*2];memset(arrtmp, 0, maxCap*2);memcpy(arrtmp, arr, maxCap*sizeof(int));delete arr;arr = arrtmp;int* auxtmp = new int[maxCap*2];memset(auxtmp, 0, maxCap*2);memcpy(auxtmp, aux, maxCap*sizeof(int));delete aux;aux = auxtmp;maxCap *= 2;}arr[++curIdx] = x;if(curMin == -1)aux[++curMin] = x;else if(x <= aux[curMin])aux[++curMin] = x;}void pop() {if(curIdx > -1)//非空的时候才pop{if(arr[curIdx] == aux[curMin]){aux[curMin] = 0;if(curMin > -1)//非空的时候才popcurMin--;}arr[curIdx] = 0;curIdx--;}}int top() {if(curIdx > -1)//非空的时候才topreturn arr[curIdx];elsereturn -1;}int getMin() {return aux[curMin];}private:/* data structure */int* arr;//当前栈int maxCap; //arr栈的最大容量int curIdx; //arr当前栈顶索引int* aux;//辅助栈int curMin; //aux栈顶索引(arr里面的最小数值)};
在leetcode上有这道题,觉得自己的代码过于冗长,是不是哪里还有优化的地方?
查看solution发现c++解题最高票答案直接使用的是两个stack容器,代码很简洁。不过自己对题目描述的理解,觉得这里的stack还是需要自己来实现的。
当然,数组可以用vector来替代以简化掉自动扩容的逻辑。
阅读全文
0 0
- Min Stack最小栈
- Min Stack 最小栈
- leetcode Min Stack 最小栈
- leetcode Min Stack 最小栈
- [LeetCode] - Min Stack O(1)最小栈
- Min Stack(返回栈中最小数)
- Min Stack 实现一个最小栈
- LeetCode 155 Min Stack(最小栈)
- LeetCode 155. Min Stack(最小栈)
- 155.Min Stack(求一个栈中的最小元素)
- leetcode 155. Min Stack 最小栈的实现
- [leetcode]Min Stack (获取栈的最小元素C语言实现)
- 【LeetCode-面试算法经典-Java实现】【155-Min Stack(最小栈)】
- 155:Min Stack【栈】【数据结构】
- leetcode_c++:栈:Min Stack(155)
- 155. Min Stack(栈)
- min stack
- Min Stack
- [python]leetcode(76). Minimum Window Substring
- Django settings 中的STATIC_URL
- 排序算法(六)-归并排序
- configure: error: xml2-config not found. Please check your libxml2 installation
- 基于OpenCV的简易四肢位置识别与动作识别
- Min Stack 最小栈
- 八、JDBC——分页查询(mysql的limit方法)
- 高质量深度学习资源总结:128篇论文,21大领域
- bzoj 1878(莫队)(主席树)
- 排序算法(七)-堆排序
- 代理服务器的原理,代理服务器和vpn的区别
- Maven搭建SSH案例(二)-----SSH框架在maven中的配置
- 2016年,某猎头给我的面试准备资料
- 排序算法(八)-基数排序