面试题19:包含min函数的栈】的更多相关文章

一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min.push以及pop三个方法: public class MinInStack<T> where T : struct { private Stack<T> dataStack; private Stack<T> minStack; public MinInStack()…
(min函数的作用是返回栈内最小值) 首先这个栈要具有普通栈所具有的push()和pop()方法,那么内部一定包含一个Stack.至于还要能实现min函数,而且还是在O(1)时间复杂度内,我们不得不考虑用额外的空间. 如果直接使用一个int变量存储当前的最小值,我们的确可以获得最小值,但是当栈pop()了以后,我们无法获得次小值.我们需要一个数据结构来动态保存每个时刻的最小值,每当push()和pop()的时候,同样更新这个数据结构,而且时间复杂度也是O(1),那么看来需要额外O(n)的空间了.…
问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1). 思路:加入一个辅助栈用来存储最小值集合 (这里要注意题目并没有说栈内的元素类型,因此要尽量通用) import java.util.Stack; public class Solution { Stack s1=new Stack(); Stack min=new Stack(); public void push(int node) { if(m…
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数. 在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值: 1.在模板类定义两个栈类型私有成员变量,一个为保存数据的栈另外一个为保存最小值的栈 2.当栈为空的时候直接将数据同时压入数据栈和最小值栈 3.当栈不为空的时候,将数据先压入数据栈同时比较该数据和最小值栈栈顶元素的大小   若大于最小值栈栈顶元素,则向最小值栈压入其栈顶元素,否则压入该数据到最小值栈   栈顶 4.…
题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数min.要求push,min,pop时间都是O(1). 思路:要用一个辅助栈,每次有新元素压栈时辅助栈压入当前最小元素:min函数直接取辅助栈栈顶元素即可:有元素弹出时辅助栈元素也弹出,这样栈顶就是剩下的元素中的最小的了. #include <iostream> #include <stack> using namespace std; template<typename T> class StackW…
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数.   思路:一个栈存普通元素,一个最小栈存放目前位置最小的元素,只在压入的时候判断是否为空以及最小元素,其他情况正常处理. class Solution { public: void push(int value) { s.push(value); if(minS.empty()){ minS.push(value); } else{ int num = minS.top() < value ? minS.top()…
问题描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1).   示例: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. mi…
一开始写的垃圾代码,push和pop都是O(N) class Solution { public: vector<int> vec; int min_val=INT_MAX,min_cnt=0; void push(int value) { vec.push_back(value); if(min_cnt==0){ min_val=value,min_cnt=1; } else if(min_val>value){ min_val=value,min_cnt=1; } } void po…
[面试题021]包含min函数的栈  MinStack.cpp: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647   #include <iostream>#include "StackWithMin.h"#include <cstdio> using namespace std; void Test(char *testName, con…
#include"iostream" #include"stdio.h" using namespace std; ; ; template<typename T>class StackWithMin { public: void push(const T& value); void pop(); T min(); private: ; int minNum=INF; T* mData=new T[MAXN]; T* mMin=new T[MAX…