您的位置:首页 > 产品设计 > UI/UE

2.设计包含 min 函数的栈[StackWithMinValue]

2014-05-20 10:03 253 查看
【题目】

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。

解法一】:

使用一个辅助栈来保存最小元素,其栈顶元素为当前栈中的最小元素。需要额外O(n)的空间复杂度。

C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

template <typename T>

class StackMin

{

public:

StackMin(void);

~StackMin(void);

void Push(const T &x);

void Pop();

const T &Min() const;

private:

stack<T> m_data;

stack<T> m_min;

};

template <typename T>

void StackMin<T>::Push(const T &x)

{

m_data.push(x);

if (m_min.size() == 0 || x < m_min.top())

m_min.push(x);

else

m_min.push(m_min.top());

}

template <typename T>

void StackMin<T>::Pop()

{

assert(m_data.size() > 0 && m_min.size() > 0);

m_data.pop();

m_min.pop();

}

template <typename T>

const T &StackMin<T>::Min() const

{

assert(m_data.size() > 0 && m_min.size() > 0);

return m_min.top();

}

解法二】:

使用1个变量记录最小值。利用存储差值而不需要辅助栈,方法比较巧妙。

/article/2939870.html

【参考】

http://zhedahht.blog.163.com/blog/static/25411174200712895228171/

/article/3642055.html

/article/2939870.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: