国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

【面試題】實現(xiàn)一個棧要求Push,Pop,Min(返回棧中最小值的操作)的時間復(fù)雜度為O(1)

2019-11-08 19:59:54
字體:
供稿:網(wǎng)友

思路:

用兩個棧來實現(xiàn),棧sData存放入棧元素,棧sMin存放最小值。

按照元素入棧順序,將要入棧的第一個元素,同時壓入兩個棧中。后續(xù)每個元素入棧時,與sMin棧中棧頂元素比較大小,若入棧元素data 小于sMin棧頂元素,則把data同時壓入兩個棧中,若data大于sMin棧中棧頂元素,則只壓入棧sData中。出棧時,判斷兩個棧頂元素是否相等,若相等則兩個棧同時執(zhí)行出棧操作,不相等則,只有棧sData執(zhí)行出棧操作。

如:先入棧序列依次為 5 3 2 4 6 1 3

①.

②.

③.

④.

出棧的話如果相等就同時出棧,否則只出棧sData中的元素

代碼如下:

#include <iostream>#include <stack>using namespace std;template <class T>class MinStack{public:	// 入棧	void push(const T& data)	{		// 第一個元素同時壓入兩個棧		if (sData.empty())		{			sData.push(data);			sMin.push(data);		}		else		{			if (data < sMin.top())			{				sData.push(data);				sMin.push(data);			}			else			{				sData.push(data);			}		}	}	void pop()	{		// 棧頂元素相等同時出棧		if (sMin.top() == sData.top())		{			sData.pop();			sMin.pop();		}		else		{			sData.pop();		}	}	T min()	{		return sMin.top();	}PRivate:	stack<T> sData;	stack<T> sMin;};int main(){	MinStack<int> s;	s.push(5);	s.push(3);	s.push(2);	s.push(4);	s.push(6);	s.push(3);	s.push(1);	cout << s.min() << endl;	s.pop();	cout << s.min() << endl;	s.pop();	cout << s.min() << endl;	s.pop();	cout << s.min() << endl;	s.pop();	cout << s.min() << endl;	s.pop();	cout << s.min() << endl;	s.pop();	return 0;}

打印結(jié)果:

122223


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 侯马市| 时尚| 武穴市| 资溪县| 阳春市| 钟祥市| 喀喇沁旗| 徐州市| 简阳市| 巫山县| 南部县| 怀宁县| 栾城县| 清丰县| 鲁山县| 响水县| 涪陵区| 彭水| 玉树县| 贵港市| 平乐县| 安化县| 三门县| 宝清县| 罗城| 东源县| 屯门区| 九寨沟县| 鄂托克旗| 武功县| 调兵山市| 宁海县| 平舆县| 青海省| 临漳县| 汉沽区| 镇雄县| 临清市| 中西区| 永仁县| 营口市|