注:get_min为最小值,是动态的,也就是说,每次的pop或push都取的是当前栈内元素的最小值。
解决方案:
设置两个栈,一个为原始数据栈S1,一个为最小值栈S2。
push操作 -- 复杂度为O(1):
开始时,push数据D1到S1,同时对比S2中的栈顶元素TD2,只有D1<topdata时才将D1 push到S2;
接着push其他数据Dn...
pop操作 -- 复杂度为O(1):
每次pop S1时(假设为TD1),先与S2的TD1比较,只有TD1<=TD2时,将TD2从S2中pop;
get_min -- 复杂度为O(1):
直接pop S2的栈顶元素TD2即为S1的当前最小值。
当然,这里的S2也可以是一个数组。
BTW: 欢迎各位同学分享自己的算法哈。