leetcode 155 Min Stack
设计一个最小栈,要求push,pop,top,getMin都是O(1)的。
关键在于:
维护一个普通栈的同时,维护额外一个栈,保存正常栈的递减序列。即除了第一元素,之后的元素都比最小栈的top小。
原理想想就懂,只有更小的能成为min。注意相同元素也入最小栈就行。
class MinStack { public: vector<int> v; vector<int> m; /** initialize your data structure here. */ MinStack() { } void push(int x) { v.push_back(x); if (m.size() == 0 || m.back() >= x) m.push_back(x); } void pop() { int t = v.back(); v.pop_back(); if (m.back() == t) m.pop_back(); } int top() { return v.back(); } int getMin() { return m.back(); } };
【本文章出自博客园willaty,转载请注明作者出处,误差欢迎指出~】