一:题目
二:思路
解释:一个栈名为st,其用来正常的出入栈,一个栈名为minst,其的栈顶元素一定是最小的元素
入栈:第一个元素,两个栈一起入,后面再入栈,只有入栈的元素,小于minst的栈顶,minst才会入栈,反之入栈的元素大于等于minst的栈顶元素,则minst继续入自己的栈顶元素
出栈:出栈的时候,二者一起出,这才能让st的元素和minst同步
优化:
解释:
入栈:第一个元素,两个栈一起入,后面再入栈,只有入栈的元素,小于等于minst的栈顶,minst才会入栈
出栈:只有st即将出栈的栈顶元素和minst的栈顶元素一样,后者才出栈
三:代码(优化版本的)
解释:
值得一提的是,改题目类中的构造函数什么都不写和直接删了都能过
因为
-
不写构造函数:
-
编译器会生成默认构造函数。
-
默认构造函数会调用成员变量的默认构造函数。
-
对于
stack<int>
,默认构造函数会初始化空栈。
-
-
写了构造函数但内容为空:
-
编译器会调用你定义的构造函数。
-
你定义的构造函数不会做任何额外的初始化操作。
-
成员变量的默认构造函数仍然会被调用,初始化空栈。
-