如何保证栈的pop/push/get_min的效率同时满足是O(1)?
摘要:注: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的当前最小值。当然,这
阅读全文
posted @ 2013-06-19 09:50
浙公网安备 33010602011771号