1.【基础题】–1.实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
解法:定义两个栈成员变量_s1和_s2, _s1作为主栈,存放该栈的元素;
_s2作为副栈,其中_s2的栈顶元素,记录主栈_s1当前所有元素中的最小值;
每当_S1中的元素出栈时,都要和_s2的元素做对比,如果_s1当前出栈的元素就是其当前_s1所有元素的最小值,即就是_s2的栈顶元素,那么_s1在栈顶出栈,此时_S1的栈中最小值已经改变;所以此时也要将_s2的最小值更新,将_s2的栈顶元素出栈;
在压栈的时候,第一次压栈,两个栈都为空,所以,给主栈压入元素时吗,副栈也压入元素;之后给主栈压栈,每次都要和副栈的栈顶元素做对比,如果压入的元素比副栈的栈顶元素小,那么说明此时主栈的最小值已经变为入栈的这个元素,那么副栈就要更新栈顶元素,确保将此时的主栈的最小值记录在副栈的栈顶;当遇到主栈压栈的元素比副栈栈顶元素大时,说明主栈压入该元素,主栈的最小值不会改变,所以副栈不用更新栈顶元素,不用压入元素;在这样副栈只压小的元素,不压大的元素,就会节省栈的空间利用
#include<iostream>
#include<stack>