您的位置:首页 > 其它

设计包含 min 函数的栈

2012-11-08 22:08 148 查看
定义栈的数据结构,要求添加一个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]];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: