码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer--包含min函数的栈

时间:2020-05-09 18:37:23      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:oid   code   变量   最小栈   minstack   data   ati   pop   push   

题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。

  • 求解思路1:设置两个栈结构,一个数据栈(dataStack)用来存放数据元素,另一个最小栈(minStack)来记录数据栈中最小的元素。每当有元素要进栈时先把进栈元素与栈中最小元素(即minStack得栈顶元素)比较,如果进栈元素更小,则把元素压入dataStack和minStack中,否则把要进栈的元素压入dataStack中,minStack压入minStack的栈顶元素。
class Solution {
public:
	void push(int value) {       //进栈
		if(dataStack.empty()){
			dataStack.push(value);
			minStack.push(value);
		}else{
			if(value<minStack.top()){
				minStack.push(value);
			}else{
				minStack.push(minStack.top());
			}
			dataStack.push(value);
		}
	}
	void pop() {                 //出栈
		dataStack.pop();
		minStack.pop();
	}
	int top() {                  //取栈顶元素
		return dataStack.top();
	}
	int min() {                  //得到栈中最小的元素
		return minStack.top();
	}
private:
	stack<int> dataStack;        //数据栈
	stack<int> minStack;         //最小值栈,当数据栈改变(数据进栈或出栈)时记录最小的元素
};

  • 求解思路2:用一个变量min来记录当前栈中最小的元素。当有元素进栈时,先把要进栈的元素与min比较,如果要进栈的元素更小或相等,则先把min压栈,再把进栈元素压栈,同时更新min变量为进栈元素的值;当有元素要出栈时,如果出栈的元素与min值相等,则先推出栈顶元素,在把栈顶元素赋值给min,在退出栈顶元素(这个时候推出的栈顶元素时保存在栈中的最小的元素值)。
class Solution {
public:
	void push(int value) {
		if(min>=value){
			if(!dataAndMinStack.empty()) dataAndMinStack.push(min);
			min = value;
		}
		dataAndMinStack.push(value);
	}
	void pop() {
		if(dataAndMinStack.empty) return ;
		if(dataAndMinStack.size()==1){
			min = INT_MAX;
		}else if(min == dataAndMinStack.top()){
			dataAndMinStack.pop();
			min = stack.top();
		}
		dataAndMinStack.pop();
	}
	int top() {
		return dataAndMinStack.top();
	}
	int min() {
		return min;
	}
private:
	stack<int> dataAndMinStack;
	int static min = INT_MAX;
};

剑指offer--包含min函数的栈

标签:oid   code   变量   最小栈   minstack   data   ati   pop   push   

原文地址:https://www.cnblogs.com/ImBystander/p/12859354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!