题目:定义栈数据结构,并在该数据结构中实现一个能获得栈最小元素的函数min.要求push,min,pop时间都是O(1). 思路:要用一个辅助栈,每次有新元素压栈时辅助栈压入当前最小元素:min函数直接取辅助栈栈顶元素即可:有元素弹出时辅助栈元素也弹出,这样栈顶就是剩下的元素中的最小的了. #include <iostream> #include <stack> using namespace std; template<typename T> class StackW…
(min函数的作用是返回栈内最小值) 首先这个栈要具有普通栈所具有的push()和pop()方法,那么内部一定包含一个Stack.至于还要能实现min函数,而且还是在O(1)时间复杂度内,我们不得不考虑用额外的空间. 如果直接使用一个int变量存储当前的最小值,我们的确可以获得最小值,但是当栈pop()了以后,我们无法获得次小值.我们需要一个数据结构来动态保存每个时刻的最小值,每当push()和pop()的时候,同样更新这个数据结构,而且时间复杂度也是O(1),那么看来需要额外O(n)的空间了.…
问题描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 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…
面试题 21. 调整数组顺序使奇数位于偶数前面…
问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一. 提示: 1 <= nums.length <= 50000 1 <= nums[i] <= 10000 代码 class Solution { public: vector<int> exchange(vector<in…
问题描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的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.除了原来的栈s,增加一个辅助栈s_min,用来保存每次进栈时的最小元素. Push操作: 栈s:元素value直接进栈s: 栈s_min:判断s_min是否为空或者value是否小于s_min的栈顶元素,如果是,将value压入栈s_min,否则将s_min.top()压入栈s_min: Pop操作: 栈s:s.pop(): 栈s_min:s…
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数. 在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值: 1.在模板类定义两个栈类型私有成员变量,一个为保存数据的栈另外一个为保存最小值的栈 2.当栈为空的时候直接将数据同时压入数据栈和最小值栈 3.当栈不为空的时候,将数据先压入数据栈同时比较该数据和最小值栈栈顶元素的大小   若大于最小值栈栈顶元素,则向最小值栈压入其栈顶元素,否则压入该数据到最小值栈   栈顶 4.…
题目: 用两个栈实现一个队列. 队列的声明如下:请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路: 根据栈的“先进后出”特点,如果将数据导入一个栈,再导入另一个栈,这样数据的出入顺序就变成了“先进先出”,即队列的特点. 假设有两个栈,stack1,stack2. 插入结点:直接压入stack1 删除结点:如果stack2为空,则将stack1中的结点导入stack2,:如果不为空,则从stack2弹出结点. 代码: #in…
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString{ public: CMyString(char* pData = nullptr); CMyString(const CMyString& str); ~CMyString(void); private: char* m_pData; }; 注意点: 是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用(*this).只有返回一个引用,才可以允许连续赋值.否则,如果函数的返…