题解 | #包含min函数的栈#
包含min函数的栈
https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
#include <vector>
/*
*思路是设计以pair{value,min_ptr}为元素的栈,
*每次插入,需额外比较旧栈顶最小值的记录以保持栈顶最小值有效
*/
class Solution {
private:
vector<pair<int, int>>kcats;//stack二元栈,附加当前栈深最小值指针
int cur;//栈顶指针,0开始
public:
Solution() {
//初始化栈,立哨兵,内置逻辑最大值
kcats.emplace_back(0x0fffffff, 0);
cur = 0;
}
void push(int value) {
//获取最小值指针,cur++
int min_loc = kcats[cur++].second;
//动态扩容避免溢出
if (kcats.capacity() <= cur)
kcats.resize(cur << 1);
//value入栈,比较最小值,若前最小值更小则记录其指针,否则更新为cur
kcats[cur] = {value, ((value <= kcats[min_loc].first) ? cur : min_loc)};
}
void pop() {
//懒处理
if (cur > 0)cur--;
}
int top() {
return kcats[cur].first;
}
int min() {
return kcats[kcats[cur].second].first;
}
};

联想公司福利 1481人发布