一开始写的垃圾代码,push和pop都是O(N)

class Solution {
public:
vector<int> vec;
int min_val=INT_MAX,min_cnt=0;
void push(int value) {
vec.push_back(value);
if(min_cnt==0){
min_val=value,min_cnt=1;
}
else if(min_val>value){
min_val=value,min_cnt=1;
}
}
void pop() {
int val=vec.back();
vec.pop_back();
if(min_val==val){
min_cnt--;
}
if(min_cnt==0){
min_val=INT_MAX;
for(const int& x:vec){
if(min_val>x){
min_val=x,min_cnt=1;
}
else if(min_val==x){
min_cnt++;
}
}
}
}
int top() {
return vec.back();
}
int min() {
return min_val;
}
};

官方辅助栈解法,push/pop/min都是O(1),记录一下

一个数据栈单纯记录数据,一个辅助栈只记录当前栈内的最小数字(辅助栈是非递增栈),push时二者同时push,但数据栈push的只是数据,辅助栈push的是当前要push的数字和辅助栈栈顶的较小值。

比如插入3,4,1,2,数据栈为3,4,1,2

辅助栈为3,3,1,1。pop时二者一起pop。取min时只要取辅助栈的top()即可。

class Solution {
public:
stack<int> data,mi;
void push(int value) {
data.push(value);
if(mi.empty() or mi.top()>=value){
mi.push(value);
}
else{
mi.push(mi.top());
}
}
void pop() {
data.pop();
mi.pop();
}
int top() {
return data.top();
}
int min() {
return mi.top();
}
};

剑指offer面试题30.包含min函数的栈的更多相关文章

  1. 剑指Offer:面试题21——包含min函数的栈(java实现)

    问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注 ...

  2. 剑指Offer - 九度1522 - 包含min函数的栈

    剑指Offer - 九度1522 - 包含min函数的栈2013-12-01 23:44 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测 ...

  3. 剑指offer(20)包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 题目分析 首先一开始我们分析得到最小值肯定要比较嘛,和栈里面的数据一一比较,但是栈这种数据结构,你又只能和栈顶弹出来的 ...

  4. 剑指offer二十之包含min函数的栈

    一.题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 二.思路 用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数.每次元素存入minSt ...

  5. 【剑指Offer】20、包含min函数的栈

      题目描述:   定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).   解题思路:   使用两个stack,一个为数据栈,另一个为辅助栈.数据栈 ...

  6. 《剑指offer》面试题30. 包含min函数的栈

    问题描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1).   示例: MinStack minSt ...

  7. 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值

    剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...

  8. 剑指 Offer 30. 包含min函数的栈

    剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...

  9. 力扣 - 剑指 Offer 30. 包含min函数的栈

    题目 剑指 Offer 30. 包含min函数的栈 思路1 使用一个辅助栈min_stack,用来维护栈的最小的元素 每次添加元素入栈时候,data_stack和min_stack都要同时维护 dat ...

随机推荐

  1. Android 判断APP前台,后台运行

    public void checkAppState() { ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVI ...

  2. koa文档笔记

    请求 get ctx.request.query // 查询对象 ctx.request.querystring // 查询字符串 ctx.query // 查询对象 ctx.querystring ...

  3. 【转载】Cadence验证仿真工具IUS和IES

    本博客转自: cadence验证仿真工具IUS和IES | 骏的世界http://www.lujun.org.cn/?p=3714 cadence验证仿真工具IUS和IES cadence,有两大验证 ...

  4. linux基础之CnetOS安装

    CentOS启动流程 POST-->boot sequence(bios)--> bootloader(mbr)-->kernel(ramdisk)-->rootfs(ro)- ...

  5. 841. 字符串哈希(hash)

    给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2l1,r1,l2,r2,请你判断[l1,r1l1,r1]和[l2,r2l2,r2]这两个区间所包含的字符串子串是否完 ...

  6. 题解【AcWing95】费解的开关

    题面 一道非常好的递推练习题. 我们考虑每次枚举第一行的操作,由上一行的状态递推出下一行的状态,最后判断最后一行是否全部为 \(1\) 即可. 实现代码时要注意一些细节问题. #include < ...

  7. Facebook Create Done!

    前天,又一次开了VPN,建立了自己的Facebook! Facebook我用邮箱注册的,注册邮箱在这里: acmit1966@outlook.com Facebook上我就叫做 Jack Deng 在 ...

  8. C++类this指针为空时的几个误区

    代码: class test{ public: static void f1(){cout<<y<<endl;} void f2(){cout<<y<< ...

  9. orm 相关

    优化

  10. AcWing 278. 数字组合 求方案数目

    //M看成背包容量,把每个数看成一个物品,Ai看成是体积 //目标:求总体积恰好为M的方案数目 #include <iostream> using namespace std; ; int ...