定义栈的数据结构,要求添加一个min的函数,能够得到栈的最下元素。
要求函数min, push, pop的时间复杂度都是O(1)
开始我是这么想的 用一个min index 当push时很容易,直接与push(int d), s[min] 和 d 做比较然后更新min
但是pop 就出问题了。当min出去了,必须要找到次min的,这时就要另外用空间保存起来。
当我想到这个方法时,还是没有做出来,我知道 增加一个辅助 stack,栈顶保存最小的,但是当push时,怎么更新
这个stack呢?这里我出现问题了,我想的是把push进来的元素在辅助栈中找到合适的位置,而不是最小的元素的位置
可能造成这种想法的原因如下
1 : 没有定义好辅助stack的意义 (辅助stack 栈顶的元素是 data 栈中从栈底到栈顶最小元素的位置)
以后要把每个步骤想清楚,而不是模模糊糊。
void push(int s, int x)
{
s[top] = x;
if (0 == top)
{
min[top] = 0;
}
else if (min[top] < x)
{
min[top+1] = top;
}
else
{
min[top+1] = top+1;
}
++top;
}
void pop(int s)
{
return pop(--top);
}
int min(int min)
{
return s[min[top-1]];
}